不小心提交到主分支而不是开发分支。现在我的主要分支在开发分支之前。我该如何解决?

Accidentally commited to main branch instead of develop branch. Now my main branch is ahead of the develop branch. How can I fix it?

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

这是我所做的:

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

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

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

无论如何,我对我所做的提交没意见,但现在我需要我的分支在同一点再次相遇(即:我需要我的 develop 分支也合并这两个提交我在 main 上弄错了)。

我该怎么办?变基或合并 maindevelop?

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

您只需更换本地分支机构即可:

# 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 命令)。
如果您有一个干净的工作树,或者如果您知道您不关心未提交的更改,这可能没问题,只要知道您在使用它时做了什么。

我确实喜欢 中“交换分支”的方法。和 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)