假设我有2个分支,master和codyDev。在我开始对codyDev进行更改之前,我会执行以下操作以确保我从codyDev上的最新主提交开始:
git checkout master
git pull
git checkout codyDev
如果有变化,git merge master
前三个步骤是否有快捷方式,所以我不必离开我的codyDev分支?我倾向于发现主人没有更新,结账/拉/结账是3个不必要的命令。
请注意,我让谷歌试图找到我的问题的答案,但似乎有各种各样的潜在和有些复杂的解决方案。看起来最吸引人的是git fetch origin master:master
的影响,但我读到的解释并不是很清楚,因为这些例子有点复杂。我也发现自己想知道“为什么要取而不是拉”(即git pull origin master:master
)?
答案 0 :(得分:5)
您可以使用codyDev
的最新更改更新master
分支,而无需实际更改分支:
git checkout codyDev # ignore if already on codyDev
git fetch origin # updates tracking branches, including origin/master
git merge origin/master # merge latest master into codyDev
这里的诀窍是,要将最新的master
合并到codyDev
,您实际上并不需要更新本地master
分支。相反,您只需更新远程跟踪分支origin/master
(通过git fetch
),然后将其合并。
您还可以使用master
直接更新本地git fetch
分支,而无需实际签出本地master
分支:
# from branch codyDev
git fetch origin master:master
但是,这仅在合并是本地master
分支的快进时才有效。如果合并不是快进,那么这将不起作用,因为在出现合并冲突的情况下需要工作目录。
阅读here了解详情。
答案 1 :(得分:5)
您可以为~/.gitconfig
添加别名。
[alias]
start = !git checkout master && git pull origin master && git checkout -b
或者运行它以从命令行添加它:
git config --global alias.start '!git checkout master && git pull origin master && git checkout'
此外,从上面的代码中可能不太清楚,但请确保在-b
之后有空格。
您也可以省略-b
并将其传递给您,以便您可以选择在现有分支上运行。在这种情况下,您将拥有:
[alias]
start = !git checkout master && git pull origin master && git checkout
然后将其称为
git start -b newBranch
或
git start existingBranch
答案 2 :(得分:1)
您可以将其保存在~./bash_profile
并执行um
。基本上,您可以获取origin/master
并查看是否有任何更改。如果是,则执行您提到的三个步骤。
# update local master
um(){
git fetch origin
num_changes=$(git rev-list HEAD...origin/master --count)
echo "Num of changes: ${num_changes}"
if [ "$num_changes" -gt "0" ]
then
current_branch=$(git rev-parse --abbrev-ref HEAD)
git checkout master
git pull
echo $current_branch
git checkout $current_branch
fi
}