拉或取时如何处理本地修改的文件?

时间:2014-09-28 00:28:29

标签: git github

我有一个开源库的GitHub分支。在我的本地副本中,我修改了许多包含的CMakeLists.txt(以及其他文件),这样它就不会编译整个库(因为有很多我不需要的东西)。因此,为了顺利整合我的变化,我做了

git update-index --assume-unchanged <files>

这样我就可以使用git,就像我没有更改任何这些文件一样。但是,每当遥控器发生变化并尝试拉动它们时(或者每当我想创建一个新分支时),我都会收到以下错误:

error: Your local changes to the following files would be overwritten by merge:
    CMakeLists.txt
    demos/CMakeLists.txt
    <other files>
Please, commit your changes or stash them before you can merge.
Aborting

因此,我必须手动撤消所有更改,并git update-index --no-assume-unchanged <files>,拉动然后再次重做更改update-index。这很痛苦,因为我几乎每天都要这样做。

我想要的是更新我的本地修改文件,如果它们有任何更改(实际上,它们不太可能被更改,因此冲突的可能性很低)但是要保留我做的更改并保持git假设他们没有改变。

有更好的方法吗?

编辑:对不起,如果已经提出这个问题。我正在寻找它,但我无法找到针对我具体案例的回复。谢谢!

3 个答案:

答案 0 :(得分:1)

您需要使用这个非常模糊的命令 - git commit;)

说真的,只要提交你的工作,让pull + rebase / merge来处理事情。

想象一下,你的上游有2次提交,就像这样

上游&lt; - 您要推送的工作&lt; - 对CMakeLists.txt的更改

git reset HEAD~1 - 将“取消提交”您最近的提交,以便您可以只推送您的第一次提交。

另外

git push HEAD~1:UPSTREAM - 将完成相同的工作,但保留您的工作。

或者您可以说git branch PUSH_ME HEAD~1然后git push PUSH_ME:UPSTREAM

此处没有选项结束。您唯一需要做的就是在工作时进行更改提交,以便您可以正确地提取/合并。

答案 1 :(得分:0)

如果文件未包含在存储库中,则应将其包含在.gitignore中,而不是应用--assume-unchanged。是这样的吗?

答案 2 :(得分:0)

我正在回答这个问题,因为它会更清楚。

首先,我做了所有我不想推送和提交它们的更改,让我们说这个提交是SHA1。然后完成其余的更改并将它们与SHA2一起提交。

现在,我的repo看起来像这样:master <- SHA1 <- SHA2我需要在不推送SHA1的情况下推送SHA2。如果我执行`git push origin SHA2:master,SHA1将被提交,SHA2将依赖它。

但是,执行git rebase -i会显示以下内容:

pick SHA1 comment1 pick SHA2 comment2

所以我改变了这些提交的顺序:

pick SHA2 comment2 pick SHA1 comment1

现在SHA2不再依赖SHA1了。执行git push origin SHA2:master只会推送SHA2的更改。

最后,如果上游发生了一些变化,那么git pull将会顺利进行。