我不经常使用 git 或 linux 命令行,而且我似乎把它搞砸了很多。我是 Windows 用户,我使用 cygwin 来模拟该环境。
情况:
我跟踪了多个存储库,一个是我处理的,另外几个是我只读的。
有时,当我很长一段时间没有从他们那里 pull 出来时(一个超过 2k 提交在我之前)然后有时 git status
告诉我,分支已经分开了。我不知道这是怎么发生的,但我落后 2k 次提交,领先 1 次。由于某些文件导致冲突,无法解决,因此 pull 失败。
这给我留下了一个问题,我现在有一个我不能再从中提取的存储库,因为它有冲突。
所以我的问题是:我怎样才能有效地再次从该存储库中提取数据而不会遇到冲突?我不关心任何变化。
这是我每次搞砸时必须做的解决方案:
git log --max-parents=0 head # copy ID on bottom
git reset --hard <ID-you-have-copied>
git clean -f -d
git pull
这很愚蠢,我喜欢在一个命令中使用它。我知道 git 别名,但我不知道如何将命令 1 中的提交 ID 获取到命令 2 中。我也可以使用可以放在某个地方的 shell 脚本,这对我来说是这样的,但它应该是动态的,没有硬编码 ID。
看起来我必须重置那个不存在的错误提交后面的分支,然后我才能再次转发
有什么明显我遗漏的吗?
最佳答案
我不确定 git --max-parents=0 head
命令是什么。
但我想你可以简单地改为这样做(origin 和 master 可以替换为所需的远程和分支名称):
git fetch origin master
git reset --hard FETCH_HEAD
git clean -f -d
这会将当前分支指针和工作树重置为最新获取的提交(并以与您的命令相同的方式删除未跟踪的文件)。
注意:这会删除存储库中的所有本地更改,包括已提交和未提交的更改。 (虽然提交的更改仍然可以通过引用 git reflog
来恢复)
关于git - 如何一劳永逸地将git存储库重置为干净状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32696310/