【发布时间】:2016-02-25 14:34:54
【问题描述】:
我想通过使用rebase 而不是merge 来避免远程存储库上的重复分支交叉点。
为了让您更好地理解我想要实现的目标,请考虑以下情况:
$ git lg
* 2345678 hotfix (HEAD -> master)
* 1234567 foo (origin/master, origin/HEAD)
$ git push
! [rejected] master -> master (fetch first)
$ git fetch
$ git lg
* 2345678 hotfix (HEAD -> master)
| * 3456789 other change (origin/master, origin/HEAD)
|/
* 1234567 foo
通常,解决此问题的标准方法是 merge 后跟 push。
$ git merge origin/master
$ git lg
* 4567890 Merge remote-tracking branch 'origin/master'
|\
* | 2345678 hotfix (HEAD -> master)
| * 3456789 other change (origin/master, origin/HEAD)
|/
* 1234567 foo
$ git push
我不喜欢这种解决方案,因为在这种特殊情况下我可以轻松避免分支。所以,让我们用git reset --hard head~1 恢复更改并尝试另一种解决方案:
$ git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: hotfix
$ git lg
* 2345678 hotfix (master)
| * 5678901 hotfix (HEAD)
| * 3456789 other change (origin/master, origin/HEAD)
|/
* 1234567 foo
现在是令人不快的部分,我必须将我的 master 移回其 HEAD:
$ git branch -D master
$ git checkout -b master
$ git push
$ git branch --set-upstram-to=origin/master master
Branch master set up to track remote branch master from origin.
$ git lg
* 5678901 hotfix (HEAD -> master, origin/master, origin/HEAD)
* 3456789 other change
* 1234567 foo
我的问题是如何简化我的rebase 并避免不愉快的部分?
【问题讨论】: