簡體   English   中英

Git:將提交發送到另一個分支,以便我可以工作並合並回去,而無需(非常慢)結帳?

[英]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 然后我想對主控BC進行少量提交,然后將它們合並到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)

這個:

  1. 從索引( git write-tree )創建一棵樹,並將其SHA-1名稱寫入stdout。
  2. 獲取分支“ master”指向的提交的SHA-1名稱。
  3. 使用在上一步中獲得的提交的SHA-1名稱作為父提交來創建提交對象。 提交對象的名稱將打印到stdout。
  4. 更新分支“ master”以指向該新的提交對象。

僅使用管道命令即可在較低的級別上運行,而無需觸摸存儲庫中的HEAD ,因此可以在原始工作樹中正常工作。

這是可以編寫腳本的,但是太麻煩了,所以我只想嘗試使用Git適當的contrib部分中可用的git-new-workdir腳本-它設置了一個鏈接到原始存儲庫的單獨的工作樹, 不包括諸如HEAD類的關鍵內容這可能會破壞原始工作樹中的工作。 因此,您可以創建新的工作樹,在其中檢出“主文件”,記錄新提交,然后將其安全合並到已簽入“並行”文件的原始工作樹中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM