下面是我在git repo中拥有的每个分支的树
[branch1]
+ boot
- cmdline.txt
- config.txt
+ etc
- fstab
[branch2]
+ etc
- passwd
- shadow
- group
当我结帐branch2
时,branch1
中的文件将从工作树中删除,反之亦然。如何在不从当前分支删除独占文件的情况下签出分支?
答案 0 :(得分:0)
这是正常功能。
您必须添加文件并提交您的初始分支:
git add .
git commit -m "hello dev of branch 1"
转到下一个分支:
git checkout branch2
并将您的branch1
合并到branch2
:
git merge branch1
答案 1 :(得分:0)
没有一种简单的方法可以执行您描述的操作,因为它与git分支的纹理背道而驰。
git中的分支旨在跟踪同一内容的不同演变路线。这并不是说这是唯一可能的用法-git非常灵活-但这是目的,其他任何事情可能也可能不容易做到。
特别是,要在包含不同内容的分支之间来回切换以将合并的内容保留在工作树中,并不是一件容易的事[1]。
我建议您退后一步,看看为什么要一个分支具有密码文件,而另一个分支具有引导目录和fstab。了解您要解决的问题之后,我们也许可以为该问题提供替代解决方案,以便您可以在其设计中更多地使用git。
至少要使您正在做的事情“工作”(并且我将“工作”加引号,因为它可能会有一些古怪的副作用),您可能想要:
.gitignore
git clean -x
来执行此操作,但要注意,这还会清除其他所有被忽略的工作树文件-例如必须重新生成的构建工件。)git checkout HEAD@{1} -- ets/fstab
,依此类推)老实说,对于“大多数情况下基本上都能正常工作”的解决方案来说,这听起来并不那么有趣,这就是为什么我建议改为查看为什么在不同分支上有不同文件的原因。
[1]如果您习惯使用以这种方式使用分支的工具,这似乎很奇怪。但是,如果您查看git定义的分支的一般情况,您将意识到有充分的理由为什么它不想做出使这“容易”的假设。
答案 2 :(得分:-1)
了解Git的工作原理!
默认情况下,每个Git分支都有一个祖先,但最初的master分支是所有其他分支的祖先。因此,如果任何分支仅具有排他文件,而不是任何其他分支,那么您应该首先从该分支删除所有文件,然后向其中添加一些排他文件。
因此,如果branch1
是branch2
的祖先,并且branch2
没有branch1
的文件,则branch2
被标记为不包含文件branch1
中的。因此,将branch1
合并到branch2
将删除branch1
中branch2
的文件。是的,合并祖先除了更新祖先的更改外没有其他作用。
尽管一个人可以git checkout --orphan NewOrphan
,但是它不能与具有不同历史记录(祖先)的另一分支合并。
因此,唯一的方法就是评论中的 @EugenConstantinDinca 。或通过不删除父分支的文件来重新考虑要实现的目标。