2011-09-27 28 views
0
* 080dc7a (HEAD, origin/master, origin/HEAD, master) 
* bfeee2f 
|\ 
| * 16e94ff (origin/McLongNumber, McLongNumber) 
| * f50319b 
| |\ 

這是我的工作樹的最後4個提交。我想通過擠壓最後一次提交的合併衍合,使我的工作樹看起來像下面的例子中,保持樹究竟事情是這樣的休息:我已經使用--onto -p-i試圖如何使用git rebase將我的工作樹完全按照我想要的方式轉換?

* bfeee2f (HEAD, origin/master, origin/HEAD, master) 
|\ 
| * 16e94ff (origin/McLongNumber, McLongNumber) 
| * f50319b 
| |\ 

沒有任何成功。即使使用-p選項時,我設法成功地壓扁最後一次提交,樹行顯示McLongNumber的master分支合併從日誌丟失。所以我想有人更熟悉rebase命令可以幫助我解決這個問題。

+0

這是從來沒有(爲永不最值)一個好主意,改變歷史的承諾這是父另一個分支。 –

回答

1

你可以這樣說:

# make 'master' point to it's parent commit, 
# but don't modify the index or working directory 
git reset --soft HEAD^ 

# rewrite the commit using the stuff in the index 
git commit --amend 

# publish the modified commit (see WARNING below) 
git push -f 

注意,SHA1會改變;它將不再是bfeee2f

警告

這幾乎總是一個非常糟糕的主意改寫已經被髮布到共享存儲庫的歷史。即使使用-f選件到git push,大多數共享存儲庫也會配置爲拒絕歷史記錄修改。因此,你可能無法做到你想要的東西。

的唯一時間是可以接受的改寫歷史的出版是:

  • 您使用的是上游資源庫的唯一的人,你知道如何從您的其他克隆歷史重寫恢復。
  • 共享資源庫的其他用戶知道如何從歷史的改寫恢復,你已經警告過他們,你改寫歷史,你的照顧,以確保重要的變化將不會被丟棄,當你力推。即便如此,重寫歷史對其他人也是極具破壞性的。這是嚴重惹惱你的同事/合作者/貢獻者的好方法。
相關問題