gpt4 book ai didi

Git 回退了 5 次 commit 忘记创建新分支了,怎么回来?

转载 作者:太空狗 更新时间:2023-10-29 13:53:45 25 4
gpt4 key购买 nike

我必须使用命令返回 Git 中的六个提交

git checkout idofthecommit

我一直在做的是继续 promise 、 promise 、 promise 。由于我没有创建真正的新分支,当我使用 git push 到外部存储库时

git push origin master

它告诉我一切都是最新的。

这意味着我实际上没有对母版进行任何更改。

如何将我一直在做的提交移动到 master 分支?

最佳答案

如果您对所运行的命令的描述是正确的 - 现在就在您一直在处理的内容上创建一个分支,以创建对其的可靠命名引用 (git branch WIP HEAD)。然后对 master 进行 rebase (git rebase master)并 check out master 并 merge 到 WIP 中。

您可以相当简单地对此进行测试,以复制这种情况并探索您需要的命令以及它们的作用。因为这个 git graphgit log --graph --oneline --decorate --abbrev-commit 的别名,并且只生成一个漂亮的 git 日志。

创建一个包含 8 个提交的演示存储库,然后 check out 6 个并创建更多提交

$ cd /tmp && git init demo && cd demo
$ for msg in one two three four five six seven eight; do echo $msg>file && git add file && git commit -m $msg; done
$ git checkout HEAD~6
$ for msg in nine ten eleven; do echo $msg>file && git add file && git commit -m $msg; done

那么让我们看看这个:

$ git graph --all
* e81b31c (HEAD) eleven
* c005e75 ten
* c567d25 nine
| * 4d28c3d (master) eight
| * 380f715 seven
| * 9966c80 six
| * 6b2f757 five
| * e43d079 four
| * ce0ff34 three
|/
* 8d5a6e1 two
* 1f880ae one

所以这实际上看起来就像是从 8d5a6e1 中提取的功能分支。唯一特别的是它唯一的引用是 HEAD。如果您现在添加一个分支引用,它将成为一个普通的功能分支。

如果您在使用分支标记标记此工作分支之前不小心检查了 master 或其他某个分支,那么您将丢失对该新提交链顶部的引用。现在你失去了分支。在这种情况下,您需要使用 reflog 来查找该链上的最后一次提交并添加对该提交的分支引用。我们可以从上面的演示存储库中看到这一点:

$ git reflog
e81b31c HEAD@{0}: commit: eleven
c005e75 HEAD@{1}: commit: ten
c567d25 HEAD@{2}: commit: nine
8d5a6e1 HEAD@{3}: checkout: moving from master to HEAD~6
4d28c3d HEAD@{4}: reset: moving to 4d28c3d
....

我们可以从 reflog 中看到一些提交,我们检查了 HEAD~6 然后又添加了三个提交。然后我们可以发出 git branch recover-commits e81b31c 来获取指向那组提交的分支并恢复它们。

关于Git 回退了 5 次 commit 忘记创建新分支了,怎么回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14545234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com