Git:检查以前的提交并放在顶部?
你好,感谢你的时间。
我已经做了一些我想要维护的提交,但是我确实需要从前一点开始。 所以这个想法是我想维护历史上最新的提交,但是我需要从之前的代码中知道它的工作原理。
特别是我需要从回购:https://github.com/PrototipoAtlas/Prototipo/commits/master
提交: 重构提取ControlsPanel
所以我做了:
git checkout 88975b656fae250f469507b3f1f80364810a0e7c
但是,我怎么能把它放在存储库的顶部?
我只是试着:
git commit
它说,没有改变。
我也读过:
Git签出旧提交,并进一步进行新的提交
如何检出旧的提交并将其提交给新的提交
签出旧的提交并使其成为新的提交
如何将Git存储库恢复到以前的提交?
但我还没有找到我完全理解的答案
请问你能帮帮我吗???
我相信你正在寻找诸如“git modification”之类的东西,但也要看看这个“重写历史”文章
另一种选择可能是交互式底座,它允许您更改提交的顺序。
TL; DR
$ git cherry-pick --strategy=recursive -X theirs <commit>
如果我理解正确,你想维护所有的提交,但是通过把状态变为提交的状态来“假装”它们从来没有发生过。 如果我是对的,让我解释一些事情:
通过设计,git可以处理指向提交的指针。 你在git中的状态是HEAD,这是一个指向ref的指针。 默认参考(即,如果您没有移动),是refs / head / master或分支主人。
$ cat .git/HEAD
ref: refs/heads/master
这又是一个指向提交的指针。
$ cat .git/refs/heads/master
6a7c2df372d612dff5fb5ce8cfbcea02f4ad5bee
我告诉你这个向你解释什么checkout
。 当你执行它时,你会收到这条消息
注意:检查'b17058ee12b46cb7b9a15057efe2f1872ff076cc'。
你处于'分离头部'状态。 您可以环顾四周,进行实验性更改并提交它们,并且可以放弃您在此状态下进行的任何提交,而不会通过执行另一个结帐影响任何分支。
如果你想创建一个新的分支来保留你创建的提交,你可以(现在或以后)再次使用-b和checkout命令。 例:
git checkout -b
HEAD现在在b17058e ... b
如果您现在检查.git/HEAD
:
$ cat .git/HEAD
b17058ee12b46cb7b9a15057efe2f1872ff076cc
这意味着你指向一个提交,但你不能提交更改,如消息指出的那样。 你可以从这个提交中创建一个分支,但是你并没有要求这个。 要做你想做的事,你需要:
$ git cherry-pick --strategy=recursive -X theirs <commit>
Cherry-pick是一个git命令,它获取提交并将其应用于HEAD。 尽管如此,它试图进行合并,所以当你想要替换提交时,你会遇到很多冲突。 所以你可以把--strategy=recursive -X theirs
作为参数来选择樱桃选择,说你希望你的改变被樱桃选择提交覆盖。
上一篇: Git: Check previous commit and put in on top?
下一篇: Wrong revert in git