【发布时间】:2019-12-14 03:46:11
【问题描述】:
将工作副本(master 分支)重置为上游分支状态的常见建议似乎是:
git checkout master
git fetch
git reset --hard origin/master
和
git checkout master
git reset --hard
git pull
或分离 HEAD:
git checkout origin/master
git reset --hard
git pull origin master
我遇到的问题是它们不是故障安全的。工作副本可能处于导致结帐错误的状态:
错误:您对以下文件的本地更改将被覆盖 通过结帐:
...
请在切换分支之前提交您的更改或存储它们。中止
似乎可以解决问题的方法如下:
git fetch
git checkout --force origin/master -B master
强制结帐,摆脱本地更改。远程分支被签出,覆盖可能存在的本地分支master 并且不分离 HEAD。 origin/master 应该指最新的远程 HEAD,因为 git fetch 在结帐之前运行。
我的问题:是否有其他 Git 极端情况可以防止这些命令失败?一些奇怪的工作副本状态,比如在合并过程中,未跟踪的文件被跟踪,反之亦然,被忽略的文件被暂存,子模块相关的东西或类似的东西?
哪些命令相当于删除整个工作副本并再次克隆存储库? (我不想真正重新克隆,因为有问题的存储库很大。)
【问题讨论】:
-
在拉取之前进行硬重置应该会使您突出显示的特定错误消息消失。硬重置会直接消灭你的工作和舞台。
-
是的,但如果我没记错的话,可能需要再次重置:拉取可能会导致合并冲突。有多种选择可以绕过它,但我认为我提出的两个命令会更有效地实现相同的结果。
-
是的,但是在硬结账/拉取之后应该可以工作。
-
git reset --hard HEAD; git clean -dfx -
我之前试过
git pull --hard,但不幸的是它不存在????无论如何,如果后者隐式地重置分支,我看不出有任何理由在强制签出/拉出之前进行硬重置。 @EncryptedWatermelon 在什么情况下需要清洁?忽略的文件会被忽略,因此它们不应该影响您推送回远程分支的内容,除非您强制暂存忽略的文件 - 但这应该通过强制签出来处理?
标签: git git-checkout git-reset