关于github:Git:检查先前的提交并将其置于顶部?

Git: Check previous commit and put in on top?

你好,谢谢你抽出时间来。

我已经做了一些我想要维护的承诺,但是我确实需要从前面的一点开始。所以我的想法是,我想维护历史上最新的提交,但是我需要从以前的代码中进行编码,我知道它是正确的。

特别是,我需要从回购协议获得:https://github.com/prototipoatals/protottipo/commits/master

提交:refaactor extract controlspanel

所以我做到了:

1
git checkout 88975b656fae250f469507b3f1f80364810a0e7c

但是,如何将它放在存储库的顶部?

我只是想:

1
git commit

它说没有任何变化。

我也读过:

Git签出旧提交,并进一步进行新提交

如何签出旧提交并使其成为新提交

签出旧提交并使其成为新提交

如何将Git存储库恢复为以前的提交?

但是我没有找到一个我完全理解的答案

你能帮我吗????


DR

1
$ git cherry-pick --strategy=recursive -X theirs <commit>

如果我理解正确的话,您希望维护所有提交,但是"假装"它们从未通过将状态变为提交状态而发生过。如果我是对的,让我解释一些事情:

根据设计,Git使用要提交的指针。您在git中的状态是head,它是指向引用的指针。默认引用(即,如果不移动)是refs/head/master或branch master。

1
2
$ cat .git/HEAD
ref: refs/heads/master

这反过来又是指向提交的指针。

1
2
$ cat .git/refs/heads/master
6a7c2df372d612dff5fb5ce8cfbcea02f4ad5bee

我告诉你这是为了向你解释checkout所做的。当你执行它时,你会收到这个消息

Note: checking out 'b17058ee12b46cb7b9a15057efe2f1872ff076cc'.

You are in 'detached HEAD' state. You can look around, make
experimental changes and commit them, and you can discard any commits
you make in this state without impacting any branches by performing
another checkout.

If you want to create a new branch to retain commits you create, you
may do so (now or later) by using -b with the checkout command again.
Example:

git checkout -b

HEAD is now at b17058e... b

如果您现在检查.git/HEAD

1
2
$ cat .git/HEAD
b17058ee12b46cb7b9a15057efe2f1872ff076cc

这意味着您指向一个提交,但是您不能提交更改,正如消息所指出的那样。您可以从这个提交创建一个分支,但您并没有要求这样做。要想做你想做的事,你需要:

1
$ git cherry-pick --strategy=recursive -X theirs <commit>

cherry pick是一个获得提交并将其应用于head的git命令。不过,它试图合并,所以当您只想替换提交时,会遇到很多冲突。因此,您可以将--strategy=recursive -X theirs作为cherry-pick的参数,表示您希望更改被cherry-pick的提交覆盖。


我相信你在找"Git修正案"之类的东西,但也要看看这篇"改写历史"的文章。

另一个选项可以是交互式REBASE,它允许您更改提交的顺序。