0

我有一个带有 5 个文件名的“主”分支


文件1.txt 文件 2.txt 文件3.txt 文件 4.txt 文件
5.txt

我将master分支到'edit_branch'。我做了这些改变

edit文件1.txt文件2.txt文件 3.txt 文件4.txt 文件
edit 5.txt文件
delete6.txt
delete
delete
add

当我将 'edit_branch' 合并到 master 时,我想要这些更改
file1.txt --> updated
file2.txt --> updated
file3.txt --> no change
file4.txt --> no change
file5.txt --> no change
file6.txt -->added

本质上,在新分支中添加或修改的文件应该合并回“主”分支。上述删除是必要的。

关于如何分支和设置回购的任何建议?

4

2 回答 2

3

这是一个与 git 的基本行为有关的问题。您希望将更改从一个分支合并到另一个分支,同时将删除视为“无更改”。但基本上,我认为这是不可能的,因为 git 将删除视为更改,因此反映了合并时的删除。

在您的具体情况下,master 仍然包含 file3.txt、file4.txt、file5.txt 并且这 3 个文件在分支 master 上没有任何意义的修改。

但是在分支“edit_branch”中,它们已被删除(最好是由 git rm),因此在 edit_branch 上进行了更改。

因此,现在如果您将“edit_branch”合并到 master,git 将看到 master 基本上是 edit_branch 的祖先提交,因此将通过简单地将 edit_branch 的最新提交指定为 master 来进行快进合并。这意味着它将始终反映删除。

但是如果 master 上的文件在创建 edit_branch 后被修改,那么 git 至少会在已删除的文件上显示合并冲突,从而告诉您哪些文件已被删除,因此需要注意。

所以,基本上没有直接的方法来做你想做的事。但是一个可能的解决方法是在创建 edit_branch 之后对 master 上的所有文件进行一些虚拟修改(比如在最后添加一个空格/或写一个注释来解释为什么修改完成)。那么即使您切换到edit_branch并意外删除了那里的一些文件,至少您会在合并期间收到有关它的通知,并有机会在合并前处理它。

我想补充一点,这种删除合并场景在任何已知的实际用例中都不是真正有用的。当您删除分支上的某些文件只是为了保持目录干净并故意使分支与核心不同时,此后您不会将其合并到核心。例如,对于 github-pages,我们创建一个分支 gh-pages 并删除该分支上除网页之外的所有文件,从而有效地从分支中隐藏不必要的内容。但是我们发现不需要将 gh-pages 合并回 master。

PS。如果你在集会期间回家,考虑给我买杯啤酒:)

于 2016-01-11T14:35:04.587 回答
0

你是从master合并的吗?

ls : License.txt MyPatch.patch Readme.txt

git branch test
git checkout test

rm许可证.txt

git status : test   deleted:        Licence.txt
git add --all
git commit -m "Remove Readme.txt"

ls : License.txt MyPatch.patch

git checkout master

ls : License.txt MyPatch.patch Readme.txt

git merge test : Readme.txt | 2 --  1 file changed, 2 deletions(-) 
                 delete mode 100644 Readme.txt

ls : License.txt MyPatch.patch

于 2016-01-11T12:59:23.107 回答