有人推进之后,更新git存储库的正确方法是什么?

时间:2012-11-07 13:55:21

标签: git

例如,如果我通过ssh将存储库A克隆到其他远程位置(B),在B中编辑,已提交,然后执行

git push A

当我回到A时,我发现它现在处于最新的修订版本,但它也有一些变化 - 实际上与B中的提交正好相反。我通常使用

来解决它
git checkout -f master

但是“-f”标志让我感到紧张 - 例如,可能会有一些有用的变化,我不小心扔掉了这个结账。

我做错了什么?是否有更好的推送/更新方式?

2 个答案:

答案 0 :(得分:2)

我认为根本问题是你git push到了一个已经签出工作副本的非裸存储库。我很惊讶git没有抱怨这个,但也许你有git的旧版本,或者你已经配置它不要抱怨。 git push将更新远程存储库,但不会更新远程工作副本,因此当您查看A时,工作副本内容对应于某些先前的版本,而存储库已更新。显然两者之间存在差异。在这种情况下,git checkout -f可能是您的最佳选择(或git reset --hard HEAD),然后将您的A存储库转换为裸存储库。

答案 1 :(得分:1)

预期的命令是“git pull”而不是“git checkout”

如果您有未提交的更改,则应该。这将保存您拥有的更改并获取新的更新。最后重新应用您最初保存的更改。

git stash
git pull
git stash pop

如果您还有尚未推送的本地提交,则可以执行此操作。这将回滚您的更改应用推送和重新应用提交。

git pull --rebase

您可以使用提交执行“git pull”,但这会添加合并提交,在我看来会污染历史并导致一些问题。

由于您所说的原因,我通常不喜欢-force选项。你不想失去任何有用的东西。