[英]Git: How to checkout without removing exclusive files from current branch
以下是我在git repo中擁有的每個分支的樹
[branch1]
+ boot
- cmdline.txt
- config.txt
+ etc
- fstab
[branch2]
+ etc
- passwd
- shadow
- group
當我檢出branch2
, branch1
中的文件將從工作branch1
中刪除,反之亦然。 如何在不從當前分支刪除獨占文件的情況下簽出分支?
這是正常的功能。
您必須添加文件並提交初始分支:
git add .
git commit -m "hello dev of branch 1"
轉到下一個分支:
git checkout branch2
並將您的branch1
合並到branch2
:
git merge branch1
沒有一種簡單的方法可以執行您描述的操作,因為它違反了git分支的原則。
git中的分支旨在跟蹤同一內容的不同演變過程。 這並不是說這是唯一可能的用法-git非常靈活-但這是目的,其他任何事情可能也可能不容易做到。
特別是,在包含不同內容的分支之間來回切換以將合並的內容保留在工作樹上並不是一件容易的事[1]。
我建議您退后一步,看看為什么要一個分支具有密碼文件,為什么要另一個分支具有引導目錄和fstab。 了解您要在此處解決的問題后,我們也許可以為該問題提供替代解決方案,以便您可以在其設計中更多地使用git。
至少要使您正在做的事情“工作”(並且我將“工作”加引號,因為它可能會產生一些古怪的副作用),您可能想要:
.gitignore
git clean -x
進行此操作,但是請注意,這還會清除其他所有被忽略的工作樹文件-例如生成構件,然后必須重新生成它們。) git checkout HEAD@{1} -- ets/fstab
這些文件( git checkout HEAD@{1} -- ets/fstab
等) 坦白說,對於“大多數時候基本上都能正常工作”的解決方案來說,這聽起來並不那么有趣,這就是為什么我建議改為查看為什么在不同分支上有不同文件的原因。
[1]如果您習慣以這種方式使用分支的工具,這似乎很奇怪。 但是,如果您查看由git定義的分支的一般情況,您將意識到有充分的理由為什么它不想做出使這“容易”的假設。
了解Git的工作原理!
默認情況下,每個Git分支都有一個祖先,但初始的master分支是所有其他分支的祖先。 因此,如果任何分支僅具有排他文件,而不是任何其他分支,那么您應該首先從該分支刪除所有文件,然后向其中添加一些排他文件。
因此,如果branch1
是branch2
的祖先,而branch2
沒有branch2
的文件, branch1
branch2
標記為不包含branch1
文件。 因此,合並branch1
到branch2
將刪除的文件branch1
在branch2
。 是的, 合並祖先除了更新祖先的更改外沒有其他作用 。
盡管一個人可以git checkout --orphan NewOrphan
,但不能將其與另一個具有不同歷史記錄的分支(祖先)合並。
因此,唯一的方法就是@EugenConstantinDinca在評論中說。 或通過不刪除父分支的文件來重新考慮您要實現的目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.