繁体   English   中英

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

[英]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上做出的那两个提交)。

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

注意:它只是本地的。 没有推动。

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

# 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 命令之一)。
如果您有一个干净的工作树,或者如果您知道您不关心未提交的更改这一事实,这可能会很好,请注意如果您使用它会做什么。

我确实喜欢LeGEC 回答“交换分支”的方法。 像往常一样在 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM