Git分支如何重新提交指定更改并恢复合并丢失的代码?
嘿,咱们一步步解决这个Git问题!
刚用Git没几周就碰到这种冲突后代码丢失的情况,太正常了,先别慌,我帮你理清问题根源,再给你具体的解决步骤,顺便优化下工作流程避免再踩坑。
先搞懂问题出在哪
你之前的操作顺序里,git stash→拉取develop解决冲突→git stash pop这个环节很容易出问题:拉取develop并解决冲突后,你的分支已经是合并后的状态了,这时候再把之前stash的代码pop出来,很可能和当前分支的代码再次冲突,你在处理的时候不小心删掉了File1里的非冲突代码,而且已经提交推送到Bitbucket了,所以现在需要先找回丢失的代码,再修正远程的提交。
第一步:找回File1里丢失的代码
Git的历史记录和stash都是咱们的救星,两种方法任选:
方法A:从提交历史里恢复
- 先看看File1的所有提交记录,找到代码还完整的那个版本:
这会列出一串带哈希值的提交信息,找到你觉得代码没丢的那个提交(比如开头是git log --oneline File1f4d3a1的那条)。 - 把这个版本的File1恢复到本地:
现在打开File1看看,应该就能找回丢失的代码了。git checkout f4d3a1 -- File1
方法B:从stash记录里恢复
如果你不确定提交历史,也可以看看之前存的stash:
git stash list
会列出你之前存的所有stash,比如stash@{0}就是最近的那个。先看看这个stash里的File1内容是不是你要的:
git stash show -p stash@{0} -- File1
如果里面有丢失的代码,直接恢复:
git checkout stash@{0} -- File1
第二步:修正提交,把File1和File2都弄对
现在本地的File1已经恢复,File2是你开发的内容,接下来整理提交:
- 把这两个文件的修改暂存:
git add File1 File2 - 修正你之前的错误提交(因为已经推过了,所以用
--amend替换最后一次提交):
这个命令会把你最后一次提交的内容换成现在的修改,相当于“纠正”了之前的错误提交。git commit --amend -m "恢复File1丢失的代码,提交我的特性开发文件File2"
第三步:推送到Bitbucket
因为你已经推送过错误的版本,现在需要强制推送覆盖远程分支(重要提醒:如果有其他同事也在这个abc分支上工作,一定要先跟他们说一声,不然会覆盖他们的工作!):
git push origin abc --force
给你优化下工作流程,以后少踩坑
这次的问题很大程度是操作顺序导致的,以后试试这个更安全的流程:
- 开发完先提交自己的工作,别用stash:
git add . git commit -m "完成XX特性开发" - 然后拉取develop分支合并到你的特性分支:
git pull origin develop - 如果碰到冲突,直接在当前分支解决,然后提交合并结果:
git add . git commit -m "合并develop分支,解决冲突"
另外,建议每隔1-2天就拉一次develop到你的特性分支,别等开发完很久再合并,这样每次冲突的内容少,更容易处理。
内容的提问来源于stack exchange,提问作者hkaur13
相关产品推荐
相关产品推荐

