【问题标题】:Git push master fatal: You are not currently on a branchGit push master 致命:您当前不在分支上
【发布时间】:2015-05-27 01:16:49
【问题描述】:

大师在说提交 #10。然而,我最终意识到我在测试过程中破坏了一些没有被测试发现的东西。

我最终要提交 #5,然后慢慢地重新进行每个提交的开发并不断调整它以确保它不会重新导致错误。现在我基本上回到了提交 #10,但有一些更改可以防止错误发生。

我现在想使用我的更改创建提交 #11。但是当我尝试推动掌握时,我得到了

fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use

    git push master HEAD:<name-of-remote-branch>

这是意料之中的。但是我如何才能真正将它推送到我的远程分支?

我试过git push origin HEAD:master,但后来得到了这个:

! [rejected]        HEAD -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/tomhammond/sample.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

当我执行git status 时,我看到HEAD detached from 4a74ac3

【问题讨论】:

  • 您是否确保在 #10 之前的提交历史是原来的,并且只有您的提交 #11 包含更改?当您的分支和原始分支具有不同的提交历史时,通常会出现这样的错误(例如,当您重新进行每个提交的开发时会发生什么)
  • 我很确定他们不会。我想我在签出 #5 后愚蠢地开始进行开发
  • 没关系,您可以使用git reset [commit10Hash] 取消暂存更改,然后git stash 将其保存一段时间,git reset --hard origin/nameofremotebranch 将其重置为原点,git stash pop 重新应用更改您想要的,然后 git add .git commit -m "Your new changes on top of origin"。然后你应该可以git push origin nameofremotebranch 没有冲突

标签: git github


【解决方案1】:

但是当我尝试推动掌握时,我得到了

fatal: You are not currently on a branch. To push the history leading to the current (detached HEAD)

这是意料之中的

在超然状态下工作是意料之中的,除非你是故意想要这样做的,我怀疑你就是这种情况。您应该将 master 分支恢复到该提交,而不是检查提交 #5,或者在交互模式下执行 git rebase,您可以根据需要重新哈希提交。

话虽如此,如果您确定处于分离状态的master 版本是您真正想要保留的版本,那么您可以强制绕过non-fast-forward 错误将分支推送到远程:

git push origin HEAD:master --force

但是,如果您强制推送,则可能会给已签出该分支的所有其他用户带来问题。一个风险较小的解决方案是从分离的 HEAD 创建一个临时分支,然后将该分支合并到 master

git branch temp-branch
git checkout master
git merge temp-branch
git push origin master

【讨论】:

  • 强制推送到主分支肯定不是一个好主意
  • @scrowler 我添加了一个他可以用来避免强制推送的工作流。
  • @RobbieAverill 为什么?
  • @GiorgiTsiklauri 有很多原因,其中一个原因是如果你在一个有分支工作流的团队中工作,你会让其他人不同步
  • 你救了我的命,兄弟。谢谢
【解决方案2】:

你确定你真的在一个分支吗?使用git branch 并检查您是否在分支中。如果没有,只需git checkout branch-name-you-want 然后git push 就可以了!

【讨论】:

  • 虽然是一个非常简单的答案,但这通常可以解决导致 OP 问题的大多数问题。就我而言,我已经恢复到之前的提交,修复了一些问题,并做了一些推送——但忘记了 HEAD 仍然是分离的!您的解决方案为我解决了所有问题。谢谢?
【解决方案3】:

git push 只会让你快进遥控器。这意味着您尝试推送的提交必须是远程分支的后代。由于您在 5 之后编辑了以前的提交,因此您没有后代,而是更多的表亲。如果你想覆盖分支,你可以给git push --force,但是如果其他人在当前master之上做了自己的更改,他们将无法再拉动分支。此外,如果其他人在你之前推送到 master,他们的更改将会丢失。一般来说,如果你不是唯一使用分支的人,你不想强制推送。

【讨论】:

  • 很棒的信息 - 实际上我现在是唯一一个在做这个的人,所以我认为应该可以
【解决方案4】:

你可以创建一个新的分支,你可以将这些更改合并到之前的分支中

git checkout -b newBranch 
git checkout previousBranch
git merge newBranch
git push origin previousBranch
git branch -d previousBranch

【讨论】:

    【解决方案5】:

    如果您要推送到新的存储库,您可以使用

    git push origin HEAD:refs/heads/main --force
    

    main 这是一个新分支,如果您的目标存储库为空,将创建该分支。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-30
      • 2014-09-11
      • 2014-10-26
      • 2014-10-21
      • 2011-02-15
      • 2014-11-15
      相关资源
      最近更新 更多