我有一个开源库的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假设他们没有改变。
有更好的方法吗?
编辑:对不起,如果已经提出这个问题。我正在寻找它,但我无法找到针对我具体案例的回复。谢谢!
答案 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
将会顺利进行。