-
初始状态:
- 远程仓库:
a + b
- 本地仓库:
a + c
- 远程仓库:
-
提交本地更改:
- 将本地的
a + c
提交到本地仓库,但还没有推送到远程仓库。 - 本地仓库:
a + c
- 远程仓库:
a + b 倒数第二次提交
- 将本地的
-
拉取远程仓库:
- 执行
git pull
- 由于
b
和c
有冲突,Git 无法自动合并,手动解决冲突,保留了它俩需要的部分 - 本地仓库现在变成了
a + b + c
- 本地仓库:
a + b + c
- 远程仓库:
a + b
- 执行
-
推送更改:
- 将
a + b + c
推送到远程仓库。 - 远程仓库:
a + b + c 这是最后一次提交
- 本地仓库:
a + b + c
- 将
-
执行
git reset --hard HEAD@{1}
:- 执行
git reset --hard HEAD@{1}
,这将你的本地仓库回退到上一个提交的状态,倒数第二次的提交a + b
。 - 本地仓库:
a + b
- 远程仓库:
a + b + c
- 执行
-
拉取远程仓库:
- 执行
git pull
- 本地仓库现在变成了
a + b + c
。 - 本地仓库:
a + b + c
- 远程仓库:
a + b + c
- 执行
-
再次提交
a + b + c
:- 再次提交
a + b + c
的更改。由于本地已经是a + b + c
,再次提交相同的状态不会有任何变化。 - 本地仓库:
a + b + c
- 远程仓库:
a + b + c
- 再次提交
git reset --hard HEAD@{1}
主要作用是回退到最后一次提交的前一次,即倒数第二次,且只改变了本地仓库代码的状态,远程仓库代码的状态不变。(PS:此命令使用前提,团队成员没有人拉取或提交,否则就会发生不可预估的结果。)
!!!!一定要注意使用前提!!!!