【问题标题】:Accidentally commited to main branch instead of develop branch. Now my main branch is ahead of the develop branch. How can I fix it?意外地致力于主分支而不是开发分支。现在我的主分支在开发分支之前。我该如何解决?
【发布时间】:2021-05-07 10:31:07
【问题描述】:

我有一个 develop 分支和一个 main 分支。当然,我应该在develop 分支上进行开发(但我在main 上)。我一个人在这个项目中工作,所以唯一的改变是我做的。

这就是我所做的:

maindevelop 都在同一个提交上。因为我在某个时候将develop 合并到了main

然后我开始编码并在main 上提交了两次,以为我在develop 分支。

所以现在我的 main 分支在 develop 分支之前提交了 2 次。这与我现在应该在的位置相反。

无论如何,我对我所做的提交很好,但现在我需要我的分支在同一点再次见面(即:我需要我的 develop 分支来合并我在 @ 上所做的这两个提交987654335@错了)。

我该怎么办?将main 变基或合并为develop

注意:这只是本地的。没有推送。

【问题讨论】:

  • 这能回答你的问题吗? Git - correct commits made to wrong branch
  • @tripleee 除了标题,我认为这个问题不一样。这似乎是一个比大多数同类问题更具体的问题。毫无疑问,其他一般性问题的答案也适用于这个问题。但是,对于这个问题,我们可以得到在其他一般性问题中不起作用的答案。
  • @TTT 感谢您的反馈。我将撤回我的近距离投票。如果仍然关闭,请随时在此处联系我。

标签: git git-branch branching-and-merging


【解决方案1】:

你只需要交换你的本地分支:

# from 'master', write down the current commit sha :
git log -1 master
# or store it in a shell variable :
commitsha=$(git rev-parse HEAD)

# reset your master branch to where 'develop' is :
git reset develop

# switch to develop :
git switch develop

# reset your develop branch to the sha at step 1 :
git reset $commitsha

注意 :使用git reset(默认为git reset --mixed),如我上面所建议的,将保持磁盘上文件的内容不变。

如果您在序列的开头进行了分段更改,您希望保留这些更改,您可以使用git reset --soft(用于两次调用),这将另外保留索引的内容。

我明确没有使用--hard 标志:git reset --hard 会默默地放弃对文件的修改而不保存它们(这是少数破坏性的 git 命令之一)。
如果你有一个干净的工作树,或者如果你知道你不关心未提交的更改,这可能很好,只要知道你在使用它时会做什么。

【讨论】:

  • 为此使用reset --mixed 非常巧妙。我认为重要的是要注意这仅适用于 masterdevelop 在添加新提交之前在同一个提交上。
  • @TTT :实际上,我认为最短的指示是给出一个至少将文件保留在磁盘(工作树)上的状态。你说得对,我会说得更清楚。
  • 这是有道理的。我真的很喜欢思考在 Git 中做同样事情的不同方法。我也用我最初的想法添加了另一个答案。
【解决方案2】:

我确实喜欢LeGEC's answer 中“交换分支”的方法。与 Git 中的往常一样,有很多方法可以实现相同的目标。这是另一种思考方式,它只是稍微更通用。如果两个分支在同一个提交上,此方法将有效,但如果“其他”分支甚至还不存在(可能是因为您打算创建一个新分支但没有),则此方法也有效。

假设你在 master 并且有 2 个你希望在另一个分支上的额外提交:

git branch -f develop   # create branch develop, or reset develop it if already exists
git reset --hard @~2    # reset master back 2 commits (note @~2 is like HEAD~2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 2021-12-24
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2017-06-17
    相关资源
    最近更新 更多