我想通過使用rebase
而不是merge
來避免在遠程存儲庫上出現經常性分支交叉點。Git rebase而不是合併,正確的方法來做到這一點?
爲了讓大家更好的瞭解我想實現什麼,請考慮以下情況:
$ 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
並避免了不愉快的部分?