明确签出一个分支并从脚本中获取 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`
这种方法有效,但我遇到了几个问题:
- 我必须输入我的密钥的私钥两次 - 我猜一次用于获取,一次用于拉取。不重要,但如果只是一次,会更好。
- 因为
--track
,如果 $BRANCHNAME
过去已经签出,我得到
fatal: A branch named $BRANCHNAME already exists
。不知道这到底有多致命,但我不想在输出中看到致命的东西
- 没有
--track
,我进入分离模式,我也不喜欢这种模式
- 仅
git checkout $BRANCHNAME
我突然收到有关“不明确”分支的消息。可能是因为 $BRANCHNAME
可能在多个遥控器上?
那么从远程签出分支、获取其最新版本并从中构建的最干净明确的方法是什么?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
我正在创建一个 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`
这种方法有效,但我遇到了几个问题:
- 我必须输入我的密钥的私钥两次 - 我猜一次用于获取,一次用于拉取。不重要,但如果只是一次,会更好。
- 因为
--track
,如果$BRANCHNAME
过去已经签出,我得到
fatal: A branch named $BRANCHNAME already exists
。不知道这到底有多致命,但我不想在输出中看到致命的东西
- 没有
--track
,我进入分离模式,我也不喜欢这种模式 - 仅
git checkout $BRANCHNAME
我突然收到有关“不明确”分支的消息。可能是因为$BRANCHNAME
可能在多个遥控器上?
那么从远程签出分支、获取其最新版本并从中构建的最干净明确的方法是什么?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