2016-11-20 152 views

回答

1

你只需要--root標誌(可用自1.7.12的Git,即對任何人,除某些無名從不更新的咳嗽* Centos的*咳嗽 Linux發行版)。

考慮到擠壓一個的結果是(排序提交的不相當遵守這個簡單的代數運算,但它適用於我們的情況下)只是A + B。因此,由於B + A = A + B,無論您是否將#1提交到提交#2或提交#2提交到提交#1,都沒有關係。當然,這並不包括壓制在一起的提交的消息,所以讓我們仔細看看。

假設您已運行git rebase -i --root以便能夠重新綁定包括根提交在內的所有內容。現在,您可以:

pick cb57fdd initial commit 
pick 478acbd second commit 

更改第二個到squash和寫入文件並退出編輯器。 Git的南瓜兩個一起提交,並再次帶來了你的編輯器,你可以看到:

# This is a combination of 2 commits. 
# This is the 1st commit message: 

initial commit 

# This is the commit message #2: 

second commit 

# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# 
# Date:  Sat Nov 19 14:44:07 2016 -0800 
# 
# interactive rebase in progress; onto 45bc10c 
# Last commands done (2 commands done): 
# pick cb57fdd initial commit 
# squash 478acbd second commit 

(精確的細節取決於你的Git版本,以及當然作爲提交內容)。

既然你是在你最喜歡的編輯器中,很容易構造你想要的任何新的提交消息。例如,你可以刪除整個第一個提交的消息,如果這是你想要的。做到這一點,寫下文件,然後退出編輯器,你就完成了。

0
  • 見分行的名稱(比如,branch-1
    $ git branch
  • 見第一提交哈希並保存其他人(比如第一個提交)
    $ git log
  • 退房得第一代提交
    $ git checkout first-commit
  • 更改提交信息
    $ git commit --amend -am 'new-commit-msg' --allow-empty
  • 現在保存新的提交哈希值(比方說,新commmit)
    $ git log
  • 回到你的 '分支1' 分支 git checkout branch-1
  • 通過new-commit
    $ git replace first-commit new-commit
  • 重寫替換first-commit所有期貨的提交基於上更換
    $ git filter-branch -- --all
  • 用力推動你的變化
    git push -f origin HEAD
+0

這是在第一次提交中編輯* message *的一種方法,但它不會壓縮與另一次提交一起提交的內容,這是OP要求的。 (如果你打算使用'git filter-branch',你也可能不需要使用'git filter-branch',因爲你可以在'git filter-branch'命令中完成整個工作,使用'--msg-filter',它由''if [$ GIT_COMMIT = ];然後cat/tmp/newmsg; else cat; fi''或類似。) – torek