从分离的头部进行 Git 推动

Making a Git push from a detached head

我是超然的,做了一些改变。我想用 Git 将这些更改推到这个分离的头上。我不希望我的更改进入 develop 分支,当然也不希望在 master 分支上。我正在与另一个人一起处理一个文件。

示例分支

   develop
   master
   *(HEAD detached at origin/49792_testMocha)

如何在不影响 develop 或 master 的情况下推入 head?

使用 git checkout -b BRANCH_NAME

创建一个新分支

然后将新分支推送到远程:git push origin BRANCH_NAME


git checkout

git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

这将检出指向所需提交的新分支。
此命令将检出给定的提交。
此时你可以创建一个分支,从这里开始工作。

# Checkout a given commit. 
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
#in order to be able to update the code.
git checkout <commit-id>

# create a new branch forked to the given commit
git checkout -b <branch name>

如果您处于独立状态并且想要推送到您的远程分支

git push origin HEAD:name-of-your-branch

否则你可以创建一个新分支并推送到它(它会自动创建)

git branch new-branch-name
git push -u origin new-branch-name

注意: pushing之前创建一个分支更推荐git 2.11或更低版本用于段错误!

Git 2.12+(2017 年第一季度)

不会出现这种情况

commit b10731f (07 Jan 2017) by Kyle Meyer (kyleam)
(由 Junio C Hamano -- gitster -- in commit b85f79c 合并,2017 年 1 月 18 日)

branch_get_push: do not segfault when HEAD is detached

"git <cmd> @{push}" on a detached HEAD used to segfault; it has been corrected to error out with a message.

现在的错误是:

HEAD does not point to a branch

使用 Git 2.12 或更高版本,您可以将分离的 HEAD 推送到远程分支,如 Matt's .

所示

为该提交创建一个新分支并检出它:git checkout -b <branch-name> <commit-hash>。现在您可以将更改推送到新分支:git push origin <branch-name>

如果您需要从剩余的提交中清理其他分支,请务必 运行 git reset --hard <branch-name>.

这是一篇解释 branching and detached head 工作原理的文章。

虽然这里的所有答案都在某种程度上回答了原始问题(如何在不影响其他分支的情况下从分离的头部推送),但都建议创建一个新分支。

以下是如何推送到新的远程分支而不创建新的本地分支:

git checkout --detach # (or anything else that leaves you with a detached HEAD - guillotine anyone?)
[change stuff & commit]
git push origin HEAD:refs/heads/my-new-branch

origin 替换为适当的远程名称(您具有写入权限),并将 my-new-branch 替换为您希望新分支调用的名称。

您在 HEAD 上的提交将被推送到名为 my-new-branch 的新分支。

detached head 通常意味着您检出的分支没有最新的提交。所以,基本上你需要调整你当前分支的 HEAD 到最新的提交。

通常有两种方法。

  1. 如果你想使用相同的分支 - 你可以使用:

    git 推送原点 HEAD: < remote-branch >

  2. 您可以创建一个新分支,将您的代码推送到该分支(这也会拉取您分离的代码)。

    git checkout -b git 提交。 git推