【问题标题】:Unable to merge untracked working tree无法合并未跟踪的工作树
【发布时间】:2017-05-12 13:56:54
【问题描述】:

我正在处理一个项目,并希望合并来自 git 存储库的更改。

远程仓库并没有忽略一些构建文件,但我已将这些构建文件添加到我的 gitignore 中(因为不同的构建系统,构建的文件显然会有所不同)。

所以当我尝试合并时:

git merge -X ours ns3-mmwave-ext/master

我收到一条错误消息,说这些构建文件将被合并覆盖。

我不希望它们被覆盖,所以我遵循了这个答案 https://stackoverflow.com/a/26639255/4126652

并尝试做:

git add -f * // Without -f git is complaining because those build files are in my gitignore
git stash
git merge -X ours ns3-mmwave-ext/master

但这仍然显示相同的错误,即相同的未跟踪工作树文件将被合并覆盖。

请注意,ns3-mmwave-ext 是一个远程并且已经被获取。

编辑:

我可以很明显地清理构建文件,但是构建过程很长,我不想仅仅为了一些小改动就重新构建整个东西。

编辑 2:

我不是远程仓库的贡献者,所以我不能只删除远程中的构建文件。

【问题讨论】:

  • 我的一般建议是不要将构建文件添加到您的 Git 存储库中。只有源文件和其他相关的预构建内容真正属于那里。
  • @TimBiegeleisen 我知道,但这不是我的项目,我不是贡献者,那些人并没有忽略构建文件。
  • 这些版本化的远程构建文件实际上是用于启动程序,还是仅仅是工件?
  • @TimBiegeleisen 它们用于启动程序,但显然构建系统可能会有所不同,无论如何我都必须在我的系统中重建它们,所以我更愿意保留我的构建文件夹。
  • 您不能忽略构建文件,也不想覆盖它们,留下的选项很少。您应该意识到根本原因是这些文件不应该被版本化。

标签: git merge


【解决方案1】:

我的建议是在其他本地 tmp 分支中提交您的 build 文件夹。然后reset你的local/masterns3-mmwave-ext/master,然后拉。

# First remove 'builds' folder from .gitignore

$ git checkout tmp
$ git commit -am 'builds folder commmit'

$ git checkout master
$ git fetch
$ git reset --hard ns3-mmwave-ext/master
$ git pull origin ns3-mmwave-ext/master

$ git checkout tmp
$ git rebase master                  # now your 'builds folder commit' will be kept in top here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-23
    • 2016-07-27
    • 2012-06-01
    • 1970-01-01
    • 2010-12-22
    • 2017-06-09
    • 2012-12-16
    • 2011-03-11
    相关资源
    最近更新 更多