Git:如何将 git all diff 结果从一个分支添加到另一个分支?

问题描述

一个很长的开发过程,许多提交和推送到 GitLab(我猜这与 GitHub 相同)。在 develop 分支最后合并到 ma​​ster 分支后,我不得不在 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。成功推送并与 ma​​ster 分支合并。 谢谢大家的帮助。