github使用详解

那么当你执行 git reset --hard 之后,历史纪录是不能跟远程的记录直接合并的。

举个例子,远程是 A -> B -> C -> D,你 git reset --hard 之后是 A -> B。这时候除非远程那边抹掉 CD,否则是不能合并的。

因此,这时候,你应该使用 git push origin master --force 来强行覆盖远程记录。

请不要根据提示使用 git pull。否则,你的本地又会变成 A -> B -> C -> D。因为 git pull 相当于 git fetch + git merge


(以下内容基于上面的例子,远程是 A -> B -> C -> D,你想回滚到 B 那个状态)

楼上提到了 git revert。其实,git reset --hardgit revert 都可以实现“回滚代码”。但区别在于:

git revert 会把你的本地变成 A -> B -> C -> D -> E。其中,E 干的事儿是删除 CD。这样做的好处在于,你 git push origin master 就不会有上面的报错了。但,历史线上还是会保留 CD 这两个 commit。如果使用这个命令,记得要 add 然后 commit

git reset --hard 会直接删掉 CD,形成 A -> B 这样的结果。好处在于更直接更彻底。缺点在于,首先要通过 git push origin master --force 去强行更改。其次,一旦你后悔了,除非根据本地的 reflog 直接恢复 HEAD 指针,此外没有其他办法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章