明确签出一个分支并从脚本中获取 git 中的最新版本

Unequivocally checkout a branch and get latest version in git from a script

我正在创建一个 shell 构建脚本。

我想这样称呼它:

./build.sh REPONAME BRANCHNAME

$REPONAME对应一个遥控器。我假设遥控器存在。 $BRANCHNAME$REPONAME 上的一个分支。

$BRANCHNAME 可能从未在此计算机上检出过。

所以我有这个:

cd $REPOPATH
git fetch $REPONAME $BRANCHNAME
git checkout --track $REMOTE/$BRANCHNAME
git pull $REPONAME
echo `git rev-parse HEAD`

这种方法有效,但我遇到了几个问题:

fatal: A branch named $BRANCHNAME already exists

。不知道这到底有多致命,但我不想在输出中看到致命的东西

那么从远程签出分支、获取其最新版本并从中构建的最干净明确的方法是什么?f

令人惊讶的是,在使用 git 这么多年之后,我仍然没有掌握必须掌握的技能。

如果您想丢弃所有内容并获取远程版本:

git fetch $REMOTE
git stash
git checkout $BRANCHNAME
git branch -u $REMOTE/$BRANCHNAME
git reset --hard $REMOTE/$BRANCHNAME

如果您想将远程分支的更新合并到您的本地分支:

git fetch $REMOTE
git stash
git checkout $BRANCHNAME
git branch -u $REMOTE/$BRANCHNAME
git merge $REMOTE/$BRANCHNAME