在 Git 中继续使用当前 HEAD 的简单方法?

Easy way to keep using current HEAD in Git?

我在Git中有以下情况:我做了很多重构和分离头部,因为我在版本之间来回走了几次。由于头部分离,我无法再提交到 origin/master 远程 b运行ch。

HEAD 是我想要保留的版本。我尝试的是将 origin/master 远程 b运行ch 合并到 HEAD 中,这样我就可以提交那个版本了。在合并期间我说我想在有冲突的地方保留我自己的更改。

结果一团糟,丢失了很多文件。还好我在手术前做了一份文件拷贝,这样我就可以回到刚才描述的情况了。

现在我卡住了。我不想经历每一个变化并决定我想保留什么(有很多)。我只想将丢失的 HEAD 提交回 origin/master,包括新的目录结构。有什么简单的方法吗?

--

在我 运行 通过 @Martin 推荐的步骤后,我现在的状态是这些(也请参阅评论):

当我处于一个我想保留的分离的 HEAD 中时,我总是首先在这一点上创建一个新的分支。假设您可以使用命令行,这是行:

git checkout -b branch_clean_version_of_stuff

现在可以很容易地在当前条件下找回您的作品。现在你也可以合并回 origin master 并推回 origin。

您可以结帐 master 并合并您的 HEAD。我在下面将其命名为 good_stuff 以避免必须知道 sha-1...

(假设所有内容都已提交到您当前的 HEAD 上)

git checkout -b good_stuff HEAD
git checkout master
git merge good_stuff

解决冲突

git commit

以后做这个的时候,不要在分离的 HEAD 上工作,做一个分支。 Git 中的分支机构实际上是免费的。

要处理已处理的分离 HEAD,请在分离 HEAD git checkout -b whatever 处创建并检出一个分支,现在将其视为普通分支。您可以像往常一样将其合并到 master 中。

要解决您当前合并分离的问题(我怀疑您忘记签出新分支),记下 HEAD 的提交 ID(或标记它),然后...

  • git结帐大师
  • git 重置 --hard

git reset 将分支标签移动到任意提交。

在第一张图中,很明显HEAD是基于一个commit back relative master。您在 master 上执行了 git checkout HEAD^ 以进入分离状态,然后从那里开始工作。实际上,你在一个无名的分支上。您可以轻松地在 master:

之上重新设置基准
git rebase master

rebase 后,这些更改将从 master 的尖端开始,而不是 master^。换句话说,现在的变化是 "fast-forward" 相对于 master.

此时,您仍处于超脱状态。您可以简单地切换到 master:

git checkout master

Git 将警告您正在离开分离状态并给您 SHA。复制该 SHA 并执行此操作:

# on master now
git rebase SHA   # fast-forward to SHA

注意:因为我们知道将 master 移动到 SHA 的更新是一个快进更改,我们也可以用 git reset --hard SHA 来完成。

如果你用 rebase 这样做,你可以避免创建 git 合并的混乱、非线性的历史特征。

只有当你不能用变基重写历史时才应该进行合并(因为历史已经发布到其他存储库)。这种情况不仅历史没有公布,连名字都没有!