如何在Git分支中跟踪特定文件?

时间:2016-01-11 12:35:59

标签: git batch-file github version-control version-control-migration

我有一个'主人'分支有5个文件名

FILE1.TXT
FILE2.TXT
file3.txt
file4.txt
file5.txt

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

edit file1.txt
edit file2.txt
delete file3.txt
delete file4.txt
delete file5.txt
add file6.txt

当我合并' edit_branch'掌握,我想要这些改变 file1.txt - > updated
file2.txt - > updated
file3.txt - > no change
file4.txt - > no change
file5.txt - > no change
file6.txt - > added

基本上,在新分支中添加或修改的文件应该合并回' master'科。上述删除是必要的。

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

2 个答案:

答案 0 :(得分:3)

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

在您的特定情况下,master仍包含file3.txt,file4.txt,file5.txt,并且这三个文件在分支主服务器上无论如何都不会被修改。

但是在分支'edit_branch'中它们已被删除(最好是通过git rm),因此在edit_branch上被更改。

所以,现在如果你将'edit_branch'合并到master,git将看到master基本上是edit_branch的祖先提交,因此只需将edit_branch的最新提交指定为master即可进行快进合并。这意味着它将始终反映删除。

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

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

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

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

答案 1 :(得分:0)

你是否与大师合并?

  

ls:Licence.txt MyPatch.patch Readme.txt

git branch test
git checkout test
  

rm Licence.txt

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

ls:Licence.txt MyPatch.patch

git checkout master
  

ls:Licence.txt MyPatch.patch Readme.txt

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

ls:Licence.txt MyPatch.patch