2017-10-06 192 views
0

我經常發現自己處於一個功能分支上,發生了變化。於是,我找出我必須做出改變,所以我:Git:在同一操作中添加,提交和重新綁定/壓扁

  1. 請使用git commit -m <commit message>
  2. 調整基線的使用git add -A
  3. 提交的變化的變化
  4. 添加的所有文件更改索引使用git rebase -i HEAD~2更改並壓扁最後兩個提交,並壓扁最新的提交,以便我最終提交1個提交

這是我經常使用很多的流程,但它感覺q麻煩和手工。有沒有更智能的方法來做到這一點,還是僅僅爲這類任務創建shell函數或別名更爲常見?我到4

回答

3

也許最簡單的方式談論步驟2修改提交,你只是一個特性分支的HEAD提出將修改是通過承諾:

git commit --amend 'your commit message here' 

的Git通過創建一個新提交提交,在功能上與舊提交相同,再加上新的更改,然後用新的提交替換舊的HEAD提交。

請注意,這會重寫歷史記錄,因此它不適用於您已經推送並可能已被其他人拉取的分支。但是,在這方面它並不比現在的基準化方法更糟糕。

作爲一種替代重型基準的方法,有一種簡單的方法來壓扁分支的兩個頂級提交。你可以做一個軟復位,然後提交:

git reset --soft HEAD~2 
git commit -m 'made a small change to latest commit' 

的Git通過移動頭指針回(在這種情況下)兩次提交,同時使雙方的工作目錄和舞臺,因爲他們是軟復位作品。這實際上是在第一次提交之前立即完成第一次提交所完成的工作以及第二次提交的補丁,在第一次提交之前的提交之前。然後,當你進行這項工作時,你將會有效地將所有內容壓縮到只有一次提交。

但大多數時候我發現自己使用提交修改比重置軟件更多地處理這種情況。

+0

還沒有嘗試過,但也許'--amend'和'-all'一起工作,所以你可以省略'git add',如果它只是改變現有的文件? –

+0

@MthethewStrawbridge我從來沒有聽說過這個,但是'git add -A'曾經不會讓我感到困擾:-) –

+1

使用'--amend'通常是正確的答案。我發現有用的是要注意它的作用,實質上是將當前的提交放在一邊,並用新的修改後的提交代替它。正如你注意到的那樣,這個「重寫歷史」(假裝你的「修改」提交從未發生過:*不要看那個,而是看看這個新的)*)。但這是一個非常普遍的情況:*工作,工作,工作;測試。耶,錯誤修復!承諾!運行完整的測試套件。哎呀,忘了特例!重新修復,修改提交,重新運行完整的測試套件... * – torek