例如,如果我通过ssh将存储库A
克隆到其他远程位置(B
),在B
中编辑,已提交,然后执行
git push A
当我回到A
时,我发现它现在处于最新的修订版本,但它也有一些变化 - 实际上与B
中的提交正好相反。我通常使用
git checkout -f master
但是“-f”标志让我感到紧张 - 例如,可能会有一些有用的变化,我不小心扔掉了这个结账。
我做错了什么?是否有更好的推送/更新方式?
答案 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选项。你不想失去任何有用的东西。