2012-08-14 126 views
1

我有以下的變化歷史在我的git倉庫:git的變基刪除提交

---X---Y---Z---A---B---C 

我開始從代碼Z的基礎工作,進行了三次修改A,B和C的每個變化已經作爲對Gerrit的單獨評論上傳,並且每個都取決於之前的更改。

經審查後我想刪除改變,讓我的更改歷史記錄是:

---X---Y---Z---B---C 

什麼是git rebase -igit commit正確的流程得到這個工作?

我假設如下:

  1. 使用git rebase -i HEAD~3顯示最後三個提交。這顯示該文件的內容:

    pick 1234567 Commit A message
    pick 1a2b3c4 Commit B message
    pick abcdefg Commit C message

  2. 我可以刪除第一行並保存文件,刪除第一次提交。

  3. 這是我卡住...如果我嘗試git commit --amend我只能修改C的犯我這樣不知道如何使用repo upload .git push

  4. 我的底墊中更改按鍵格里特審查

我正在使用Gerrit 2.2,因此在審閱頁面上沒有重新佈局按鈕。

+2

沒有第3步。你完成了...... – 2012-08-14 14:35:47

+0

編輯了第3步,使問題更清楚。基本上,我怎麼把rebase change或者B和C推到Gerrit。 – Markus 2012-08-14 14:38:05

回答

2

以下步驟現在已經爲我工作:

  1. 使用git變基-i HEAD〜3顯示最後三個提交。這顯示該文件的內容:

    pick 1234567 Commit A message
    pick 1a2b3c4 Commit B message
    pick abcdefg Commit C message

  2. 我可以刪除第一行並保存文件,刪除第一次提交。

  3. git log現在顯示我的B和C的變化Z的基後,與他們的新SHA-1值

  4. 我然後可以單獨地推到它們各自的評價每個變化:

    git push ssh://myserver:29418/project SHA1_of_B:ref/changes/123
    git push ssh://myserver:29418/project SHA1_of_C:ref/changes/789

123789是審查編號分別改變B和C.我的B和C更改每個都有新的補丁,適當地重新發布。

原來我的問題只是理解,我不得不git push兩個單獨更改。

+0

有幾個星期前登錄過兩個'markus'用戶? – eckes 2012-08-14 14:59:03

0

步驟2)之後,您已完成重新綁定。選擇後承諾挑選。您可能會遇到合併衝突。修正他們與git mergetool並做一個git rebase --continue

編輯:因爲重新確實會改變歷史。我不知道gerrit會如何對此作出反應。您可以嘗試添加強制標記,例如git push -f,但請記住,由於歷史的變化,這是很危險的!

+0

如何將這些更改推送給B和C的Gerrit進行檢查? – Markus 2012-08-14 14:40:42