我不经常使用git或
linux命令行,似乎我搞砸了很多.我是一个
Windows用户,我使用cygwin来模仿那个环境.
情况:
我有多个存储库跟踪,一个我工作,还有一些只为我读取.
有时候,当我长时间没有从他们身上拉过来时(一次超过2k的提交在我之前),有时git状态告诉我,分支已经发散了.我不知道这是怎么发生的,但我接下来提交了2k提交,然后提前1次提交.然后由于某些文件导致冲突而无法解决拉动失败.
这让我有了这个问题,我现在有了一个我无法再从中拉出来的存储库,因为它存在冲突.
所以我的问题是:如何在不遇到冲突的情况下再次有效地从该存储库中提取?我不在乎任何改变.
这是每次搞砸时我必须做的解决方案:
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仍然可以恢复已提交的更改)