结帐,提款,结账,合并/转扣的Git快捷方式

时间:2016-09-13 00:56:41

标签: git git-branch git-merge shortcut git-checkout

假设我有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)?

3 个答案:

答案 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
}