使用git我做了这样的东西

git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)

因为它告诉我,当我处于超然的头脑状态时,我仍然可以做出承诺,我这样做了。 但现在我想合并分离的head分支和本地master分支,然后将我的一堆更改推到origin/master。

所以我的问题是我如何将主分支与我的实际状态(分离头)合并


当前回答

也许不是最好的解决方案,(将重写历史),但你也可以做git重置——hard <散列的分离头提交>。

其他回答

或者,您可以在分支上选择commit-id。

<commit-id>在分离head状态

Git checkout master

Git cherry-pick <commit-id>

没有临时分支,没有合并。

你可以使用git merge <commit-number>或者git cherry-pick <commit> <commit>…

正如Ryan Stewart所建议的,你也可以从当前的HEAD创建一个分支:

git branch brand-name

或者只是一个标签:

git tag tag-name

这就是我所做的:

基本上,可以将分离的HEAD看作一个没有名称的新分支。你可以像其他分支一样提交到这个分支。一旦你完成了提交,你想把它推到遥控器。

因此,您需要做的第一件事是为这个分离的HEAD命名。你可以很容易地做到这一点,就像在这个分离的头部:

git checkout -b some-new-branch

现在您可以像其他分支一样将其推到远程。

在我的例子中,我还想快进这个分支,并在分离的HEAD(现在是某个新分支)中进行提交。我所做的就是:

git checkout master

git pull # to make sure my local copy of master is up to date

git checkout some-new-branch

git merge master # this added the current state of master to my changes

当然,我后来把它合并了才掌握。

差不多就是这样。

当我做了导致分离头部的签出,git实际上告诉我在这种情况下该怎么做:

Git开关-c \<new-branchname>

结果会像分离头之前一样离开主节点,而包含在分离头状态下工作时所做的所有提交的新分支。

重现/测试/了解更多细节:

用两次提交创建一个testrepo:

~/gittest$ git log——一行 17c34c0 (HEAD -> master 5975930 1

签出之前的提交1

~/gittest$ git checkout 5975930

这条德国信息出现了

Hinweis: Wechsle zu '5975930'. Sie befinden sich im Zustand eines 'losgelösten HEAD'. Sie können sich umschauen, experimentelle Änderungen vornehmen und diese committen, und Sie können alle möglichen Commits, die Sie in diesem Zustand machen, ohne Auswirkungen auf irgendeinen Branch verwerfen, indem Sie zu einem anderen Branch wechseln. Wenn Sie einen neuen Branch erstellen möchten, um Ihre erstellten Commits zu behalten, können Sie das (jetzt oder später) durch Nutzung von 'switch' mit der Option -c tun. Beispiel: git switch -c \<neuer-Branchname> Oder um diese Operation rückgängig zu machen: git switch - Sie können diesen Hinweis ausschalten, indem Sie die Konfigurationsvariable 'advice.detachedHead' auf 'false' setzen. HEAD ist jetzt bei 5975930 1

翻译成英语是:

Note: Change to '5975930'. You are in the state of a 'detached HEAD'. You can look around, make experimental changes and commit them, and you can discard any possible commits you make in this state without affecting any branch by switching to another branch. If you want to create a new branch to keep your created commits, you can do that (now or later) by using 'switch' with the -c option. Example: git switch -c <new-branch-name>. Or to undo this operation: git switch -. You can turn off this hint by setting the configuration variable 'advice.detachedHead' to 'false'. HEAD is now at 5975930 1

(通过www.DeepL.com/Translator翻译(免费版))

一个简单的解决方法是为该提交创建一个新的分支并向其签出:git checkout -b <branch-name> <commit-hash>。

这样,您所做的所有更改都将保存在该分支中。如果你需要从剩余的提交中清理你的主分支,一定要运行git reset—hard master。

有了这些,你将重写你的分支,所以确保这些更改不会打扰任何人。一定要看一下这篇文章,以更好地说明分离HEAD状态。