2012-08-08 68 views
9

我有分支foo關閉master/head。我想表揚大師/負責人,並在分支foo上找到這些變化。我做了以下事情:如何git commit - 發佈一個分支的提交

git checkout master 
git add ... 
git commit --amend 
git checkout foo 
git rebase master 

問題是舊的未修改的提交顯示爲分支foo的一部分,修改後,它被重新綁定到master上。我做了一個git rebase -i並刪除了舊的提交併且工作,但是有沒有更簡單/更安全的方法來修改作爲分支基礎的提交?是的,它是沒有被全部推本地提交..

回答

11

所有你需要做的就是告訴混帳從哪裏開始變基:你可以做到這一點

git rebase --onto master SOMESHA foo 

哪裏SOMESHA是老主人SHA。也就是說,如果你的樹現在看起來是這樣

* aaaaaa - (master) 
| * bbbbbb - (foo) 
| * cccccc - (old master) 
|/ 
* ffffff 

你做

git rebase --onto master cccccc foo 

你的樹會那麼這個樣子。

* dddddd - (foo) 
| 
* aaaaaa - (master) 
| 
* ffffff 

旁白:,我們可以使用的cccccc不同的名稱,如果你不喜歡使用SHA值提交。

> git reflog master 

aaaaaa [email protected]{0}: reset: moving to something 
cccccc [email protected]{1}: commit: change the froozle 
ffffff [email protected]{2}: commit: snarf the froozle 

這意味着我們可以參考cccccc[email protected]{1}(AKA,主站的先前位置)

因此,我們可以寫提交ccccccfoo^這個復位爲

git rebase --onto master [email protected]{1} foo 

的另一描述(也就是foo的parernt),所以我們也可以這樣寫:

git rebase --onto master foo^ foo 

他們都做同樣的事情,你可能更喜歡在不同的情況下使用不同的。我通常會發現SHA很容易使用,因爲在執行此類操作之前,我經常會拉起我的存儲庫的圖形。

+0

謝謝,這個作品 – Aaron 2012-08-08 15:44:24

+0

而不是提交SHA你也可以使用'master @ {1}'。 – chbaker0 2017-07-25 20:28:48

+0

@ chbaker0你絕對正確 - 我最初以爲你是在暗示一些不同的東西。我將這個建議添加到解釋的答案中。 – 2017-07-26 02:34:47