如何在合并时使git忽略目录

时间:2013-01-16 22:52:20

标签: git merge

对于How to setup a git driver to ignore a folder on merge的答案来说,有趣且有用的是,它没有回答仍然让我难以理解的原始问题。

与上面链接的问题不同,我有两个具有相同目录集的分支,并且为了将一个目录合并到另一个目录中,我需要git完全忽略一个目录。

我使用我自己的合并驱动程序尝试了它,如How do I tell git to always select my local version for conflicted merges on a specific file?中所述,但这种方法的问题是只有在这两个分支中存在实际冲突文件时才会调用此驱动程序。只要文件的更改只在一个分支上,git就会合并它们而不调用我的合并驱动程序。

这会导致我不想要的目录中的文件发生更改。知道如何让git一直忽略该目录中的每个文件 - 无论是否被触及?

2 个答案:

答案 0 :(得分:60)

我实际上并没有使用Git,但我认为这适用于您的情况:

使用类似于此处指定的内容:https://gist.github.com/564416

git checkout master    
git merge --no-commit --no-ff development
git reset -- /path/to/folder # revert updates from path
git commit

同样,我不使用git,我只是根据我使用TryGit的经验推迟我认为事情的工作方式。

  1. 结帐大师
  2. 合并,但不提交,不快进。
  3. 合并现在已暂存,因此请重置整个目录树
  4. 提交

答案 1 :(得分:0)

假设我正在分支暂存中,希望合并dev并忽略/ build文件夹中的更改:

git checkout staging
# go to staging branch

git checkout dev .
# this checkout dev file changes into staging

git reset HEAD build
# this remove added file in build folder

git clean -f
# this drops untracked files we just reseted

git checkout -- .
# this drops changed files we just rested

git status
# check is everything ok

git commit -am 'merge dev into branch'
# create a commit

git merge -s ours dev
# this create a fake merge to trick Git into thinking that a branch is already merged when doing a merge later on.

此解决方案并不完美,因为它将所有提交合并为一个。 这意味着选择某些提交可能不合适。

但是它可以避免由于需要清除的重命名/新建/删除而导致构建文件夹中的大量提交。