Git储藏和Git拉取

127
我是Git的新手,正在使用EGit Eclipse插件进行提交。
我修改了一些文件并将更改储藏起来,然后在命令行中执行了git pull,它拉取了所有最新的提交。然后我在EGit中执行了应用已储藏的更改。现在,它应用了我的更改,并覆盖了从储藏文件的最后一个提交中拉取的更改。我不确定为什么它没有询问我有关合并冲突的问题,并覆盖了我的更改,丢失了之前提交的更改。
如何获取那些更改?

这听起来不太可信。Stash应用程序要么带来未冲突的更改,要么导致合并冲突。我认为你忘记提到了某些内容。此外,您可以重复您的步骤,很可能您的stash仍在列表中,请使用git stash list来显示它。 - kan
3个回答

293

当你的工作副本有更改时,从命令行执行以下操作:

git stash 

这将会储藏您的更改并清除您的状态报告

git pull

这将从上游分支拉取更改。确保报告中显示“fast-forward”。如果没有,则可能会执行意外合并。

git stash pop

这将把存储的更改应用到工作副本中,并从暂存区中删除这些更改(除非存在冲突)。如果存在冲突,它们将保留在暂存区中,以便您可以重新开始。

如果您需要查看暂存区的内容

git stash list

1
@java_newbie,如果你想用stash和pull来做这件事,那是不可能的。但是你可以通过rebase来实现相同的结果。命令“git rebase origin/<上游分支名称>”应该可以达到同样的效果。 - yilmazhuseyin
8
我觉得这个命令可以实现:git stash && git pull && git stash pop - Fabrice Kabongo
@yilmazhuseyin 你所说的“相同结果”是什么意思?如果可以的话,你能举个例子吗?你是指 git rebase origin/master 会产生与 git stash; git pull; git stash pop 相同的结果吗? - nehem
1
--autostash 总是有效吗?例如,如果我有未跟踪的文件已经部分在 Git 中? - qräbnö
@qräbnö 不是的,它只是执行类似于 git stash && git pull && git stash pop 的操作,如果有冲突,它会自动为您存储。 “应用autostash导致冲突。 您的更改已经安全地保存在存储中。 您可以随时运行"git stash pop"或"git stash drop"。” - foxiris

17

请使用:

git pull --autostash

1
--autostash已经失控了!它真的改变了我的生活。 - Patrick Brinich-Langlois

3

当你编辑你的.gitconfig时,这是要做的第一件事。

[pull]
  autostash = true
; and also
[rebase]
  autostash = true
[merge]
  autostash = true


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接