簡體   English   中英

如何使用git-subtree轉到特定的提交?

[英]How do I go to a specific commit using git-subtree?

我正在使用Avery Pennarun的git-subtree,它是git的擴展。

如何使用git子樹將子倉庫中的提交櫻桃揀選到主倉庫中? 另外,在已經對該前綴執行git子樹提取之后,如何在子存儲庫的歷史記錄中進行特定的提交?

我主要是在南瓜提交模式下運行它。

我如何進入子倉庫歷史記錄中的特定提交?

如果您已壓縮提交,則沒有辦法,因為南瓜會丟失不同的提交。

否則,使用未壓縮的子樹,您可以導航到該子樹的任何提交,該提交的散列與創建子樹的原始存儲庫中的散列相同。

git subtree (不包含南瓜)實際上將外部存儲庫中的所有相關提交作為當前回購中的獨立樹添加到存儲庫中。 當您git subtree add您會注意到git subtree add了多個提交(來自外部存儲庫的所有原始提交)和最后一個合並提交,該提交將內容從該子樹移動到使用--prefix選項指定的給定目錄。 簡而言之,它從另一個不相關的存儲庫中簽出一個分支,然后通過將所有內容移動到給定的子文件夾中將其合並到您的當前分支中。

所有這些意味着您可以使用外部存儲庫的歷史記錄,您可以像這樣簽出,請記住,由於是完全不同的樹,此簽出可能會修改工作空間的所有內容,這在很大程度上項目可能很長。

這將我們移至第二個:

如何使用git子樹將子倉庫中的提交櫻桃揀選到主倉庫中?

好像自己的git subtree當前不支持“ cherrypicking”。 但是,鑒於上述所有含義,可以完成以下工作。

# move yourself to the subtree commit of your choice
git checkout <subtree-hash>

# fetch commits from the subtree repository, to have available the commit you want
# to cherry pick.
git fetch <path-to-remote>

# cherry pick the hash you want
git cherry-pick <cherry-hash>

# move back to your original branch
git checkout <your-branch>

# subtree merge your cherry pick (using the previous HEAD),
# so that it gets moved to the correct location specified by prefix.
git subtree merge --prefix <subtree-prefix> HEAD@{1}

# Since you probably fetched more commits that you needed from
# the remote, you might want to clean those that where not needed
git gc

考慮到這樣做之后,如果您嘗試將git subtree pull引入到子樹中進行更新,並且其中包括您選擇的提交,那么您將以沖突結尾,因為您將在同一位置進行兩次更改。

如果您有權訪問原始的子樹存儲庫,則另一個更簡單的選擇是在分支中選擇櫻桃,然后僅git subtree pull該特定分支。

暫無
暫無

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

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