回退笔记11
如何退回到 pull 前的代码状态
如果你在 pull 远程代码后未处理冲突导致报错,可以按照以下步骤退回到 pull 前的状态:
方法一:使用 git reset
-
首先查看 git 日志找到 pull 前的 commit:
bash
-
git log --oneline
-
找到 pull 前的 commit hash(通常是 pull 操作前的一个 commit),然后执行:
bash
-
git reset --hard <commit-hash>
方法二:使用 git reflog
-
查看操作历史:
bash
-
git reflog
-
找到 pull 前的操作记录(通常是 pull 前的一条记录),然后执行:
bash
-
git reset --hard HEAD@{n}(n 是 reflog 中 pull 前操作的序号)
方法三:使用 ORIG_HEAD
Git 在进行危险操作(如 merge 或 pull)时会自动保存之前的 HEAD 到 ORIG_HEAD:
bash
git reset --hard ORIG_HEAD
注意事项
-
--hard会丢弃所有未提交的更改,包括工作目录和暂存区的修改。如果这些修改重要,请先暂存或创建分支保存。 -
退回后,你可以:
-
重新 pull 并正确处理冲突
-
创建新分支来处理合并
-
使用
git stash保存本地修改后再 pull
-
-
如果已经推送了错误的合并,需要更谨慎处理,可能需要使用
git revert而不是git reset。
希望这些方法能帮助你恢复到 pull 前的状态!
54f1836 (HEAD -> sit) MREQ-10 <E4><BE>E5><BA><94><E5><95><86><E8><B4><A6><E6><9C><9F><E5><8F><98><E6>B4><E5><AF><B9><E6><8E><A5><E9><92><89><E9><92><89><E5><8F><91><E8><B5><B7><E5><AE><A1><E6><89><B9> 55229e0 Merge branch 'sit' of https://gitee.com/a-little-mosquito/scm into sit a004fd6 MREQ-7 <E4><BE>E5><BA><94><E5><95><86><E7><AE><A1><E7><90><86><E5><A2><9E><E5><8A><A0><E5><BC><95><E5><85><A5><E5><AE><A1><E6><89><B9>(<E5><86><B2><E7><AA><81><E4><BF><AE><E5><A4><8D>) 556ecba MREQ-9 <E4><BE>E5><BA><94><E5><95><86><E7><BB><88><E6><AD><A2><E6><B5><81><E7><A8><8B><E5><AF><B9><E6><8E><A5><E9><92><89><E9><92><89><E5><8F><91><E8><B5><B7><E5><AE><A1><E6><89><B9> f401444 MREQ-7 <E4><BE>E5><BA><94><E5><95><86><E7><AE><A1><E7><90><86><E5><A2><9E><E5><8A><A0><E5><BC><95><E5><85><A5><E5><AE><A1><E6><89><B9> 12926a6 MREQ-5 ODM<E9><87><87><E8><B4><AD><E8><87><AA><E8><8D><90><E9><9C><80><E6><B1><82><E4><BD><9C><E5><BA><9F><EF><BC><88>Bi<E9><A9><BE><E9><A9><B6><E8><88><B1><E5><AF><BC><E5><87><BA><E4><BC><98><E5><8C><96><EF><BC><89> ec7262a MREQ-8 <E4><BE>E5><BA><94><E5><95><86><E7><AE><A1><E7><90><86><E6><A8><A1><E5><9D><97><E5><AF><BC><E5><87><BA><E5><8A><9F><E8><83><BD><E4><BC><98><E5><8C><96> 41a0c44 Merge branch 'sit' of https://gitee.com/a-little-mosquito/scm into sit bedfa3a MREQ-8 <E4><BE>E5><BA><94><E5><95><86><E7><AE><A1><E7><90><86><E6><A8><A1><E5><9D><97><E5><AF><BC><E5><87><BA><E5><8A><9F><E8><83><BD><E4><BC><98><E5><8C><96> fde52a4 MREQ-7 <E4><BE>E5><BA><94><E5><95><86><E7><AE><A1><E7><90><86><E5><A2><9E><E5><8A><A0><E5><BC><95><E5><85><A5><E5><AE><A1><E6><89><B9> <E9><A1><B5><E9><9D><A2><E6><90><9C><E7><B4><A2><E6><9D><A1><E4><BB><B6><E8><B0><83><E6> <95><B4> 6bbe7af MREQ-7 <E4><BE>E5><BA><94><E5><95><86><E7><AE><A1><E7><90><86><E5><A2><9E><E5><8A><A0><E5><BC><95><E5><85><A5><E5><AE><A1><E6><89><B9> <E5><A2><9E><E5><8A><A0><E7><BB><93><E7><AE><97><E6><96><B9><E5><BC><8F> 我该如何执行
根据你的 git log 输出,看起来你最近执行了一个合并操作(55229e0 Merge branch 'sit' of https://gitee.com/a-little-mosquito/scm into sit),现在想要回退到这个合并之前的状态。
解决方案
方法1:使用 ORIG_HEAD(最简单)
bash
git reset --hard ORIG_HEAD
这会回退到合并前的状态(即 a004fd6 这个提交)。
方法2:明确指定要回退到的提交
bash
git reset --hard a004fd6
这会回退到 a004fd6 这个提交(合并前的最后一个有效提交)。
方法3:使用 reflog(更灵活)
-
首先查看操作历史:
bash
-
git reflog
-
找到合并前的操作记录(应该会显示类似
HEAD@{1}: checkout: moving from...或HEAD@{1}: commit: ...的记录) -
然后执行:
bash
-
git reset --hard HEAD@{n}(n 是合并前操作的序号)
注意事项
-
这些命令会丢弃所有未提交的更改,如果你有重要的未提交修改,请先:
bash
-
git stash
保存你的修改。
-
回退后,你可以:
-
重新 pull 并正确处理冲突
-
或者创建新分支来处理合并:
bash
-
-
-
git checkout -b feature/your-branch git pull origin sit
-
-
如果你已经推送了这个合并到远程,回退后需要使用
git push -f强制推送(谨慎使用,确保团队其他成员知道这个操作)。 -
中文显示乱码的问题可以通过设置 git 编码解决:
bash
git config --global core.quotepath false
更多推荐



所有评论(0)