[英]Git: send commit to another branch so I can work and merge back, without (very slow) checkout?
我有2個分支, main
一個和我正在parallel
發行版的一個。
A --> B --> C (master)
\
-> E --> F (parallel)
parallel
分支將始終與master
合並。 總是。 並對其進行修改。
A --> B --> C --> D --> H (master)
\ \ *merge*
-> E --> F --> G --> J (parallel)
如果我切換分支,這很容易做到。
但是,如果我正在parallel
工作,是否可以在不切換分支的情況下做到這一點? 切換的問題在於來回 切換需要很長時間 ( 特別是在Unity 3D上 )!
假設我在F
,而master在A
。 然后我想對主控B
和C
進行少量提交,然后將它們合並到G
。 我又怎么做而又不切換分支?
(現在)有一個使用git worktree
解決方案容易git worktree
:您將獲得共享相同存儲庫數據的其他工作樹(即結帳)。
該手冊頁指出:
一個git倉庫可以支持多個工作樹,從而允許您一次簽出多個分支 。
這意味着您無需切換分支,而只需在將活動從“ master
”切換到“ parallel
或從“ parallel
”切換到“反向”時更改目錄。 由於沒有額外的(克隆的)存儲庫,因此無需像推送,合並或獲取操作那樣管理它,也沒有配置麻煩。
為分支parallel
添加其他工作樹:
git worktree add path/to/new-worktree parallel
要同時在兩個分支上工作,請在並行克隆之間進行推送。
# one-time setup:
new=parallel-master
git clone . ../$new -b master
git remote add $new ../$new
切換至主站:
cd ../parallel-master
# work work commit commit lalala
切換回去:
git push origin master
cd ../main
這就是全部, git merge
正常工作。 如果您打算從並行合並到主服務器,只需在切換之前按另一種方式進行操作,兩種方法就一樣。
您可以使用低級(管道)Git命令以及單獨的工作樹和索引來實現所需的目標。
如git(1)
手冊頁所述 ,通過使用環境變量,可以為給定的Git存儲庫制作單獨的工作樹,基本上是:
$ mkdir foo && cd $_
$ export GIT_DIR=/path/to/the/repo/.git
$ export GIT_INDEX_FILE="$(pwd)/.index"
$ git read-tree master
$ git checkout-index -a -u
現在更新工作樹中的文件並進行更改( git add
等),然后
$ editor /tmp/COMMIT_MSG
$ git update-ref refs/heads/master $(git commit-tree $(git write-tree) -p $(git rev-parse master) </tmp/COMMIT_MSG)
這個:
git write-tree
)創建一棵樹,並將其SHA-1名稱寫入stdout。 僅使用管道命令即可在較低的級別上運行,而無需觸摸存儲庫中的HEAD
,因此可以在原始工作樹中正常工作。
這是可以編寫腳本的,但是太麻煩了,所以我只想嘗試使用Git適當的contrib
部分中可用的git-new-workdir
腳本-它設置了一個鏈接到原始存儲庫的單獨的工作樹, 不包括諸如HEAD
類的關鍵內容這可能會破壞原始工作樹中的工作。 因此,您可以創建新的工作樹,在其中檢出“主文件”,記錄新提交,然后將其安全合並到已簽入“並行”文件的原始工作樹中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.