在一个命令(或只是几个)中拉,换,推

时间:2011-09-26 13:27:38

标签: git merge rebase git-rebase

使用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

......我厌倦了这样做。有没有办法在没有所有结账的情况下进行这种跳舞,最好不用(手动)创建临时分支?

2 个答案:

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