git重構提交樹:分支、變基和挑揀提交的用法
在Push時報錯
一種解決方案是
git push remote-name --delete branch-name
git push remote-name branch-name
刪除遠端倉庫的遠端分支,之後Push一個同名的分支,即可解決Push報錯問題
合併提交
這個是用變基命令,重寫歷史的一部分。
可以運用
git rebase -i HEAD~num
在通過指定pick squash等內容來實現合併幾次提交。
把出現在下方的提交,標記為squash,即可讓這幾次提交被合併。
挑揀
提交樹依賴情況
git cherry-pick e43a6
挑揀後
注意配合分支命令。branch 可以隨時指定某個任意的提交id來建立分支
提交多次但是合併請求稽核時:稽核者要求一次合併請求對應一次提交編譯稽核。
可能會想到的解決問題的命令是revert reset rebase cherry-pick等等,但是其實用branch就可以。
因為branch 可以隨時指定某個任意的提交id來建立分支,所以可以把這多次提交,指定為多個分支,push時建立並push到分別的遠端分支上即可做到一次提交對應一個合併請求。
移動到某次提交的狀態
這是在提交樹上自由移動的一種延伸用法。
git branch branch-name commit-id
可以給某個提交id指定分支名,這樣,就可以方便地切換到這一分支,也就是可以隨時切換到某次提交的狀態
重構提交樹
branch :隨時給提交id指定分支名即建立對應分支
cherry-pick: 隨時挑揀需要的提交到當前分支
rebase: 方便的變基
以上三條命令,交替結合使用,可以非常方便的構建出自己想要的提交樹形態。
git變基重寫歷史push前與push後
程式碼提交到git上有一套規範。比如提交日誌的寫法。
git push reponame branchname
再提交 commit
之後,可能有點微調,可能就是想調整一下提交資訊。
那麼使用
git commit --amend
就可以了。
這個命令我理解為對 git rebase -i HEAD~
想要乾淨的提交樹。分以下兩種情況。
push之前重寫歷史
這主要就是使用 git rebase -i
注意有的之前使用過 rebase
的,可能日誌資訊條數被壓縮過。
在push之前重寫歷史,是最容易的。在Progit 中文第二版242頁中,有詳細介紹,不贅述。
push之後重寫歷史
這是我的認知盲區,對分支使用不熟練,潛意識裡不敢刪除分支,其實在git裡這種擔心很沒有必要,隨時新建一個分支,刪除一個分支。在 push
了一堆無效提交到遠端倉庫後,想要重建一個乾淨的提交樹。
那麼在沒有別人在使用 push
成果的情況下,可以直接
git push reponame --delete branchname
把本地通過 rebase
調整過的提交樹 push
上去就可以了。
git push reponame branchname
附錄
在使用 rebase
重寫歷史的時候。
注意處理衝突,處理完後要
git rebase --continue
繼續確認提交日誌資訊。
同時要確認清楚多個修改過的資訊。
同時,多用 git status
和 git add
確認修改被git記錄到。
資料就是Progit中文第二版和互動式教程https://learngitbranching.js.org/?locale=zh_CN