[英]How to git merge dev branch without touching configuration files that have been --skip-worktree'd?
[英]How to git merge named branches A into B without touching my worktree?
我想編寫一個Shell腳本,以便可以安排兩個分支之間的合並在特定時間發生。 但是,由於到達該時間后可能正在另一個分支工作,因此我需要在后台進行。
那么,有沒有一種簡單的方法可以將分支A合並到分支B中,而不必先結帳B?
使用索引執行真正的(非快進)合並-這是因為在文件沖突的情況下,您必須將其基礎和文件的兩面都存儲在索引條目中。 git merge
是一個瓷器命令,它也觸及工作樹,但這對於管道級命令不是必需的。 因此,要將A
合並為B
您至少需要一個單獨的索引。
因此,您有以下兩種選擇:
使用git-new-workdir
contrib腳本將任意目錄轉換為“ shim”存儲庫,該存儲庫具有自己的工作樹, HEAD
和索引,但使用原始Git存儲庫的對象存儲。
IMO,這是最簡單的方法,除非您要編寫腳本以重復執行多次。
使用管道Git命令和環境變量來烹飪適合執行合並的環境。
您可以將索引和工作樹放在一邊, 然后在其中使用git merge
執行正常的合並; 這在處理其他問題的同時,說明了如何設置單獨的索引和工作樹。
或者,您可以選擇更嚴格的路線,並僅使用單獨的索引和管道級命令來執行僅索引合並。 要做到這一點的關鍵命令(在放置單獨的索引之后)是:
git read-tree -m
執行實際的合並,以及 git write-tree
使樹對象脫離索引,並且 git commit-tree
創建引用該樹對象的提交。 您已經有了要保護的工作樹,請使用另一個工作樹。 git clone
的便宜之處在於:
temp=$TMPDIR/temp
git clone -s . $temp -b B
( cd $temp; git merge origin/A && git push ) && rm -rf $temp
如果存在合並沖突,則不會刪除temp,請修復它們,然后推入rm。
如果您在推送失敗時已將B
檢出,則在准備就緒時git pull $temp
。
克隆將執行完整的簽出,合並實際上不需要執行其工作。 很容易避免,
git clone -s . $temp -b B --no-checkout # < add --no-checkout
cd $temp
git read-tree HEAD # < add read-tree HEAD
git merge
# ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.