我还在努力学习Git的(基本?)细节,并设法让自己陷入困境.我意识到我在HEAD上犯了一些错误,检查了一个较旧的提交并从那里开始编码.当我尝试推送时,我被告知我当前的提交已落后,我需要与HEAD合并.Git建议"git pull".但是,HEAD有我想忽略的代码.我该如何解决这个问题?非常感谢帮忙.
流程图:
-------- HEAD (bad) ---------------------- + (behind conflict, requires
\ / merge with HEAD, which is
\------- Current commit (good) ----/ bad and needs to be ignored)
Run Code Online (Sandbox Code Playgroud)
rad*_*tek 48
这是你可以做的:
git checkout <branch-to-modify-head>
git reset --hard <commit-hash-id-to-put-as-head>
git push -f
Run Code Online (Sandbox Code Playgroud)
如果您不强制推送,git将抛出此错误:更新被拒绝,因为您当前分支的提示落后.
请注意,这将篡改您的git历史记录,因此另一种方法是还原您不想要的每个提交.这样你就可以保留你的历史:
git revert commit-id
Run Code Online (Sandbox Code Playgroud)
干杯
mea*_*gar 14
如果您的存储库未被其他人使用,则可以安全地git push -f覆盖远程分支.
ANeves 是对的,“git push -f”之所以有效,是因为您是唯一使用存储库的人。对于大多数人来说,这不是一个可接受的解决方案。
这是您当前的提交历史记录:
---A-B < HEAD (bad)
\
C < my_branch (good)
Run Code Online (Sandbox Code Playgroud)
这有您想要的解决方案: 如何在 Git 中的另一个分支上“覆盖”而不是“合并”一个分支?
回顾一下,
git checkout my_branch
git merge -s ours HEAD
Run Code Online (Sandbox Code Playgroud)
这将取消 HEAD 分支上的所有更改,并为您提供以下信息:
--A-B-D < HEAD, my_branch (both good)
\ /
C
Run Code Online (Sandbox Code Playgroud)
在这种情况下,D 实际上与 C 相同,只是有不同的父母。
唯一对我有用的东西:
git checkout <OLD_COMMIT>
git branch temp
git checkout temp
git branch -f master temp
git checkout master
git branch -d temp
Run Code Online (Sandbox Code Playgroud)
我这样做的方式是:
git reset --hard <commit-SHA>
git push origin HEAD:<name-of-remote-branch>
Run Code Online (Sandbox Code Playgroud)
这是git推荐的方式git push -f,对于开发团队中的其他所有人而言,这样做可能会有些问题
| 归档时间: |
|
| 查看次数: |
46976 次 |
| 最近记录: |