使用Git时,我常常在master
工作时发现自己正在执行以下操作:
# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git checkout master
$ git pull origin master
# turns out master was updated since my previous pull
$ git checkout temp
# I don't want a merge commit for a simple bugfix
$ git rebase master
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp
......我厌倦了这样做。有没有办法在没有所有结账的情况下进行这种跳舞,最好不用(手动)创建临时分支?
答案 0 :(得分:24)
如果您不介意不创建名为temp
的分支,则可以在master
上执行以下操作:
git commit -a -m 'more work done'
git fetch origin
git rebase origin/master
......或等效地:
git commit -a -m 'more work done'
git pull --rebase origin master
但是,如果您确实希望保留temp
分支,那么只需执行master
pull
,您仍然可以缩短这一点 - 只需要fetch
然后将您的分支重新绑定到origin/master
:
# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git fetch origin
# It looks like origin/master was updated, so:
$ git rebase origin/master
# Then when you finally want to merge:
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp
sehe's answer提醒我你可以替换:
$ git fetch origin
$ git rebase origin/master
... with:
$ git pull --rebase origin master
... 几乎等同于。不同之处在于,当您运行git fetch origin
时,origin
的所有远程跟踪分支都将更新,而当您从origin
中提取特定分支时,它们都不是 - 它是只是更新的临时引用FETCH_HEAD
。我个人更喜欢运行一个额外的命令(git fetch origin
),并查看输出中已更改的所有远程分支。
答案 1 :(得分:9)
您至少可以优化基础:git pull --rebase
我不确定你喜欢什么,但我喜欢我的工作流程:
git checkout -b temp
git commit -a -m 'more work done'
git pull --rebase origin master
这样我就把注意力集中在手头的分支上。
然后,我做
git checkout master
git pull origin master
git merge temp
等