[譯] 分割一個已存在的 git commit

江米小棗tonylua發表於2018-11-18

原文:codewithhugo.com/split-an-ex…

Git 與其他版本控制系統的主要區別之一,在於其允許使用者重寫歷史。實現這一目的的主要途徑則是 git reabse,通常還跟隨著一句 git push --force 以用本地歷史重寫遠端歷史。

這裡要談論的是如何用rebaseresetcommit 來分割既有的提交。

比方說在一次 commit 中,包含了兩個編輯過的檔案(A 和 B);但你只想把其中的 A 引入當前分支,B 則不需要。

使用 git cherry-pick <
commit-hash>
並不可行,因為它會把 A 和 B 的改變都拉過來。

解決方法是將那次 commit 分成兩個,然後只 cherry-pick 包含了 A 的那個。

做法如下:

  • 執行 git rebase -i <
    commit-hash>
    ~
    (注意 ~),或者 git rebase -i <
    hash-of-previous-commit>
  • 在編輯視窗中找到要更改的那次 commit,將其前面的 pick 改成 edit
  • 儲存並退出 VIM
  • git reset HEAD~ 以重置階段性的改變
  • git add [files-to-add] 所有本次需要用到的檔案 (此處就是 A)
  • 正常的 git commit -m <
    message>
  • 一次或多次的將剩餘的檔案分別提交
    • `git add [other-files-to-add]“
    • git commit
  • git rebase --continue 以指示分割過程完成並退出變基操作

最後,就可以用 git cherry-pick <
new-commit-hash>
將所需的新提交引入我們的分支中了。

–End–

搜尋 fewelife 關注公眾號

[譯] 分割一個已存在的 git commit

轉載請註明出處

來源:https://juejin.im/post/5bf127daf265da612d18dcf5

相關文章