git - 如何一劳永逸地将git存储库重置为干净状态

标签 git

我不经常使用 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/

相关文章:

Git 困惑 - 如何将本地更改恢复为最新的远程推送?

Git - 包含来自其他存储库的文件

.net - 我应该如何使用 Git 在多台计算机上的 SharpDevelop 项目中使用 SQL Server Compact Edition?

git - 此存储库已超过其数据配额。负责LFS带宽的账号应该购买更多的数据包来恢复访问

ruby-on-rails - Openshift 上的 Ruby "bundle install"错误

git - 加速 `git blame` 在有很多提交的存储库上

git - 在推送到版本控制远程服务器之前检查以确保项目已编译

git - 将本地分支与远程分支同步

gitlab-shell -> git push -u origin master -> fatal : The remote end hung up unexpectedly

git - 无法将 git flow 应用于 Sourcetree 中的其他用户