问题描述
有一个很长的开发过程,许多提交和推送到 GitLab(我猜这与 GitHub 相同)。在 develop 分支最后合并到 master 分支后,我不得不在 master 分支中进行反向处理。不知何故,所有最新的更改现在都在两个分支中丢失了。幸运的是,我的电脑中有一个包含所有最新更改的本地副本。但是 Git 认为所有更改都丢失的最后一点是我想要的,我无能为力。 我电脑的现状:
$ git branch -a
develop
* localdev
master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
remotes/origin/revert-4b75add3
localdev 是我创建的本地分支,它包含所有最新更改,但是 Git 认为它们太旧了,因为我在尝试在 中做正确的事情时引用了一些新的提交正在推送到 GitLab 的开发分支。
所以我认为我需要以某种方式比较 localdev 分支与 develop 分支并将所有差异添加到 develop 分支。然后我希望我应该能够提交并将所有更改推送到 GitLab。如何做到这一点?
此外 reset --hard 是一种艰难的方式,我不想这样做,因为很难跟踪最早的更改,而且我会丢失那些提交(我猜),所以我想避免这种情况。
解决方法
为了帮助您查看两个分支之间的提交,您可以使用 git diff
,
一个例子
git diff branch1..branch2
此示例将向您展示“branch2”具有但不在“branch1”中的所有提交
另一种比较方法是,
git diff branch1...branch2
这是使用带有三个点的 git diff
,它将右分支(HEAD)的顶部与两个分支的共同祖先进行比较。
要查看两个分支之间的提交差异,请使用 git log
命令并指定要比较的分支。
git log branch1..branch2
要查看两个分支之间写入文件的差异,请使用 git diff
命令,指定两个分支和文件名。
git diff master..feature -- <file>
如果您想从另一个分支添加提交,可以使用 git cherry-pick
命令。
所以最后我得到了这些命令:
(develop)
git reset --hard b8a61c3e
git push -f origin develop
在 gitlab 中临时关闭 master 保护。
(master)
git reset --hard b8a61c3e
git push -f origin master
现在一切正常。将我的 localdev 分支中的其余更改手动添加到 develop。成功推送并与 master 分支合并。 谢谢大家的帮助。