将master分支合并到另一个Git分支并不会删除分支中的文件

时间:2014-08-08 22:08:45

标签: git git-branch git-merge atlassian-sourcetree

所以,几个星期前我开始使用Git并遇到一个问题,我似乎找不到合适的答案。实际上问题很简单。

  1. 在发布之初,我们有一位大师,就是这样。
  2. 主人创造了3个分支,比方说X,Y和Z.
  3. 从X中删除了大约50个文件,并在3天前推送回主页。
  4. Master正确显示这50个文件已被删除。
  5. 过去3天,Y和Z之间频繁出现分支合并。
  6. 为了尝试将所有更改放在一起,我首先使用Z中的所有更改更新Y,最后尝试将X中的更改“合并”到Y,希望这会删除当前分支中的文件(Y)最初在X中删除,然后推入Master。
  7. 但是,合并不会删除文件,我仍然将它们都放在Y中。但是,当我在SourceTree中执行提交日志时,我可以清楚地看到50个文件被删除的变更集。不合并删除文件?

1 个答案:

答案 0 :(得分:0)

这听起来像是一个缓存问题。您拥有Y中的所有文件,但随后在X中将其删除。无论出于何种原因,文件添加和删除往往会产生类似这样的怪异内容。

我尝试对要删除的每个文件进行循环,然后使用

将其从缓存中删除

git rm --cached <file>

下面是一个ruby脚本,假设你在Y分支(未经测试),可能会为你做这个:

#! /usr/bin/ruby

diff = `git diff --name-status X` #this will give you the name and status as (A, M, D, etc.)

# The output will look like this:
# A \t added_file
# D \t deleted_file
# M \t modified_file
# etc.

diff = diff.split #splits on new lines
deleted_files = diff.map do |entry|
  status_name_pair = entry.split('\t')
  return status_name_pair.last if status_name_pair.first == 'D'
end

deleted_files.each do |filename|
  `git rm --cached #{filename}`
end

或者如果您删除的所有文件都在一个目录中,您可以这样做:

git rm --cached <dir>