[英]git branch -f bN, git checkout bN and git push --force to all commits after an interactive rebase
假設我有這個 git 結構:
* hash3 (HEAD -> origin/bN, bN) Message N
|
* ...
|
* hash2 (origin/b2, b2) Message 2
|
* hash1 (origin/b1, b1) Message 1
|
* hash0 (origin/master, master) Message 0
如果我想修改b1
的某些內容,我會執行git rebase -i hash0
並使用消息Message 1
編輯提交。 在變基之后,我將擁有:
* hash6 (HEAD -> bN) Message N
|
* ...
|
* hash5 Message 2
|
* hash4 Message 1
|
| * hash3 (origin/bN) Message N
| |
| * ...
| |
| * hash2 (origin/b2, b2) Message 2
| |
| * hash1 (origin/b1, b1) Message 1
|/
* hash0 (origin/master, master) Message 0
然后,我將每個新的 hash 與其相應的分支鏈接起來,並將其推送到原點,以便獲得以下信息:
* hash6 (HEAD -> origin/bN, bN) Message N
|
* ...
|
* hash5 (origin/b2, b2) Message 2
|
* hash4 (origin/b1, b1) Message 1
|
* hash0 (origin/master, master) Message 0
我對每個<b1, hash4>
, <b2, hash5>
, ...
, <bN, hash6>
使用以下命令(這很麻煩):
git branch -f b1 hash4
git push origin b1 --force
問題:有沒有辦法自動化這個邏輯?
是的。 對於一次性,您可以將命令添加到您的選擇列表中,這樣您就不必手動查找重寫的 id。
pick hash2
exec git branch -f b2
pick hash1
exec git branch -f b1
如果有很多裁判,你可以通過 pipe 選擇列表來加快速度
awk '/^pick/{print $2}'|git log --stdin --no-walk --pretty='pick %h %s%x0a%-D'
這將使用指向每個選擇提交的所有參考來注釋列表。
我將不得不 go 通過幾輪 bash 測試來一次檢測分支的順序....但這就是想法:
git checkout --detach master # so we don't move master
# this is the part that should be turned into a repetitive cycle, 2 steps per branch
git cherry-pick master..b1
git branch -f b1
git cherry-pick b1..b2
git branch -f b2
git cherry-pick b2..b3
git branch -f b3
.
.
.
git cherry-pick bn-1..bn
git branch -f bn
# and you finally push all the branches
git push origin -f b1 b2 b3... bn
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.