Git:如何在不从当前分支中删除独占文件的情况下签出
下面是我在git回购中拥有的每个分支的树Git:如何在不从当前分支中删除独占文件的情况下签出,git,Git,下面是我在git回购中拥有的每个分支的树 [branch1] + boot - cmdline.txt - config.txt + etc - fstab [branch2] + etc - passwd - shadow - group 当我签出branch2时,将从工作树中删除branch1中的文件,反之亦然。如何在不从当前分支中删除独占文件的情况下签出分支?这是一项正常功能 您必须添加文件并提交初始分支: git add . git commit -m "he
[branch1]
+ boot
- cmdline.txt
- config.txt
+ etc
- fstab
[branch2]
+ etc
- passwd
- shadow
- group
当我签出branch2
时,将从工作树中删除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的设计更好地使用git 至少,为了让你正在做的事情“起作用”(我在引号中加上“工作”,因为它可能会有一些奇怪的副作用),你可能会想:
- 在每个分支上,将从该分支排除的文件添加到
.gitignore
- 在切换到包含不在当前分支上的文件的分支之前,您可能必须删除这些文件的工作副本。(在简单的双分支示例中,您可以使用
执行此操作,但请注意,这也会清除任何其他被忽略的工作树文件,例如随后必须重新生成的构建工件。)git clean-x
- 切换到排除当前分支上文件的分支后,将这些文件从当前分支中签出(
等等)git checkout HEAD@{1}--ets/fstab
[1] 如果您习惯了以这种方式使用分支的工具,那么这可能看起来很奇怪。但是如果你看一下git定义的分支的一般情况,你会发现有很好的理由说明为什么它不想做一些假设来让它变得“简单”了解git是如何工作的强> 默认情况下,每个Git分支都有一个祖先,但初始主分支除外,它是所有其他分支的祖先。因此,如果任何分支只有排他的文件,而其他分支只有排他的文件,那么您应该先从分支中删除所有文件,然后向其中添加一些排他的文件 因此,如果
branch1
是branch2
的祖先,并且branch2
没有branch1
的文件,则branch2
被标记为不包含branch1
的文件。因此,将branch1
合并到branch2
将删除branch2
中branch1
的文件。是的,合并祖先除了更新祖先的更改之外没有任何效果
尽管可以git签出--orphan NewOrphan
,但它不能与另一个具有不同历史(祖先)的分支合并
因此,唯一的方法就是按照@EugenConstantinDinca在评论中所说的那样。或者通过不删除父分支的文件来重新思考您试图实现的目标。可能只需合并两个分支(可能合并到第三个分支上)。否则,基于git diff-p branch1..branch2 | patch的东西应该可以工作(我假设你的操作系统/工具包有一个
补丁
等等)。git merge branch1
只是说已经是最新的
但是没有branch1
文件被添加到这里请复制你所有的命令行。当您在branch2时,必须键入git merge branch1
(通过checkout
命令)。在branch1中,获取已更新的是正常的。当我在branch2中时,我执行了git签出-b branch3
,然后执行了git合并branch1
。但是git ls files
仅显示来自branch2
的文件,不存在来自branch1
的文件。现在我执行了git签出branch1
和git合并branch2
。现在,gitls文件
没有branch1
文件!!在每次签出或合并之前,您必须提交。安装并查看它的git命令。最初我没有阅读您的答案,因为我不理解您的行:,因为它与git分支的粒度
,进化的行
。太戏剧化了,你看?但在我给出答案后,我开始好奇地想明白你想说什么;你也这么说@neckTwi-不,事实上我不明白。这些短语并没有什么“戏剧性”,它们在表达我的意思时相当标准。另外,我们的答案肯定不一样,事实上,我认为您可能需要花一点时间更好地理解git的分支模型——因为,例如,在git中说分支有“祖先”是不正确的。我已经更正了我的短语“合并祖先”没有任何效果。既然签出的新分支与当前分支具有相同的历史记录,那么当前分支不是成为新分支的祖先吗?@neckTwi:不是。我不知道我是否不理解你的问题,因为看起来你刚刚问了我一些事情是否属实,我知道