[英]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
上)。 我一个人在这个项目中工作,所以唯一的改变是我做的。
这就是我所做的:
main
和develop
都在同一个提交上。 因为我在某个时候已经将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.