git在分支中合并,我在其中创建了新文件的目录已被移动

时间:2015-08-05 19:07:15

标签: git git-merge git-status

我想合并一个已移动目录的分支,并且我已在我的分支中的此目录中添加了文件。但是,当我尝试这样做时,我的分支中的新文件没有移动到新目录。

我不确定这是否相关,但此存储库中的另一个复杂因素是" new"以前存在的目录,另一个分支同时删除旧版本的新目录,并将旧目录移到其上面。新目录的旧版本的存在是由于我们的存储库中的目录被误用于版本控制目的,而实际上应该由git处理,但是当时这样做很方便。

那么,我怎样才能做一个"互动合并" (即解决合并冲突或使用git merge --no-commit),找到所有新文件并将它们移动到新目录?

问题在于,在这个"合并状态":

  1. 合并期间要删除的文件实际上尚未删除。我不想将他们移到新目录,因为我担心他们可能是这些文件的过时版本。
  2. 旧目录中也有一些被忽略的文件。我也不想将它们移动过来。
  3. git status没有显示添加的新文件,因为它们不是 - 它们已经提交到当前分支。
  4. 有问题的文件实际上存在于旧目录的新的工作树中,尽管它们似乎没有在新目录中注册git(可能的git) bug?我对这里发生的事感到困惑)

1 个答案:

答案 0 :(得分:0)

对于大多数被忽略的文件,点2应该不是必须的,但是有些类型的文件在以某种方式移动时无法正常工作,所以如果你真的想删除它们,你可以{ {1}}。

对于第1点,您可以通过执行git clean -i -x -d <old directory>来执行删除操作。

第3点现在不重要了,因为我们现在拥有了我们想要移动的所有文件 - 只有那些文件 - 存在于旧目录中。

现在剩下的就是移动它们。这有点棘手,因为新目录不是空的,但你可以在Linux和Mac OS X上使用this answer for that。不幸的是,脚本没有使用git注册移动,所以你可能想要更改{{1该脚本中git checkout -- <old directory>的命令(在这种情况下必须提供mv,因为第4点)。