1. 程式人生 > 實用技巧 >git重構提交樹:分支、變基和挑揀提交的用法

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來建立分支

,這非常方便和重要,參考可以自由在提交樹上移動。在提交樹上自由移動,參考遊戲中學git

提交多次但是合併請求稽核時:稽核者要求一次合併請求對應一次提交編譯稽核。

可能會想到的解決問題的命令是revert reset rebase cherry-pick等等,但是其實用branch就可以
因為branch 可以隨時指定某個任意的提交id來建立分支,所以可以把這多次提交,指定為多個分支,push時建立並push到分別的遠端分支上即可做到一次提交對應一個合併請求。

移動到某次提交的狀態

這是在提交樹上自由移動的一種延伸用法。

git branch branch-name commit-id

可以給某個提交id指定分支名,這樣,就可以方便地切換到這一分支,也就是可以隨時切換到某次提交的狀態

,便於將來可能的Push。

重構提交樹

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 statusgit add 確認修改被git記錄到。

資料就是Progit中文第二版和互動式教程https://learngitbranching.js.org/?locale=zh_CN