Answers:
好吧,是的,不是...
我了解您希望本地副本“覆盖”远程文件中的内容,但是,哦,伙计,如果有人以某种不同的方式修改了远程存储库中的文件,而您只是忽略了它们的更改并尝试“强制”您自己的更改,甚至没有考虑可能的冲突,那么,我为您(和您的同事)哭泣;-)
话虽如此,但是做“正确的事情……” 确实很容易。
第1步:
git stash
在您的本地仓库中。这样会将您的本地更新保存到存储中,然后将修改后的文件恢复为编辑前的状态。
第2步:
git pull
获取任何修改版本。现在,希望不会得到您担心的文件的任何新版本。如果没有,那么下一步将顺利进行。如果这样做,那么您还有一些工作要做,并且您会很高兴的。
第三步:
git stash pop
这会将您在步骤1中隐藏的修改后的版本与您在步骤2中提取的版本进行合并。如果一切顺利,那么您将大功告成!
另一方面,如果您在第2步中所做的操作与您的修改之间存在真正的冲突(由于其他人在此期间进行编辑),您将找到并被告知要解决它们。做吧
事情会解决很多这样更好-它可能会保持你的改变,而不需要您的任何实际工作,同时提醒你认真,严肃的问题。
您可以先存储本地更改,然后拉出,然后弹出存储。
git stash
git pull origin master
git stash pop
任何覆盖远程更改的内容都会产生冲突,您必须手动解决这些冲突。
因此,您已将本地更改提交到本地存储库。然后,为了在不更改本地文件的情况下对本地存储库进行远程更改,可以使用git fetch
。实际上git pull
是一个两步操作:一个非破坏性的git fetch
后跟一个git merge
。请参阅“ git pull”和“ git fetch”之间有什么区别?进行更多讨论。
详细的例子:
假设您的存储库是这样的(您已经进行了更改test2
:
* ed0bcb2 - (HEAD, master) test2
* 4942854 - (origin/master, origin/HEAD) first
而origin
存储库是这样的(别人已经承诺test1
):
* 5437ca5 - (HEAD, master) test1
* 4942854 - first
此时,git会抱怨并要求您先尝试将其推test2
送到远程存储库。如果要在不修改本地存储库的情况下查看test1是什么,请运行以下命令:
$ git fetch
您的结果本地存储库将如下所示:
* ed0bcb2 - (HEAD, master) test2
| * 5437ca5 - (origin/master, origin/HEAD) test1
|/
* 4942854 - first
现在,您可以在另一个分支中进行远程更改,并且可以保持本地文件完整。
那接下来呢?您可以执行git merge
,其效果与git pull
(与上一个组合时git fetch
)相同,或者,按照我的喜好,git rebase origin/master
可以将更改应用到之上origin/master
,这样可以使您拥有更清晰的历史记录。
git commit
局部变化而已git pull
?