如何将分支合并到master而不做任何更改?

Ale*_*lex 6 git git-extensions git-branch

我想将集成分支合并到主分支中,但我不想仅仅为了看起来不错而更改任何内容。

积分分支是灰色的。这个分支包含了很多改动,我想搞一招。要重置它,当与主服务器分离时,因为我可以看到最后的更改并将它们与主服务器上的一次提交一起放置。因此,master 将包含来自集成分支的文件的最新版本,但集成将保持与 master 分离。

我想将集成合并到 master 中,仅在视觉上(不进行更改),以便在历史记录中看起来不错,因为我已经通过该单一提交进行了更改。

在此输入图像描述

最后一个问题是:如何合并 master 中的集成而不对 master 进行更改,而仅影响历史记录(视觉上)?

我想这样做是因为:

  • 在我从主项目结构中拆分集成后进行了修改,现在我遇到了很多冲突。手动合并更容易。之后,我只想“合并”master 上的集成,而不进行更改(因为已经存在)。

tru*_*ktr 6

这是我做到的一种方法。这假设我们正在运行current-branch并将合并branch-to-merge到当前分支 ( current-branch)。

第一的:

git merge branch-to-merge
Run Code Online (Sandbox Code Playgroud)

此时,如果我们遇到合并冲突,只需提交包括冲突在内的所有内容而不修复它们,这并不重要。因此,如果我们有冲突,无论如何都要提交:

git add every thing
git commit # conclude the merge, don't worry about conflict markers
Run Code Online (Sandbox Code Playgroud)

现在让我们获取这个新合并提交的提交哈希。跑步

git log
Run Code Online (Sandbox Code Playgroud)

查看历史记录并复制合并提交的哈希值。假设这次提交是12345abc. 现在我们将重置current-branch回合并之前的先前提交,以便我们将文件恢复到我们想要的状态:

git reset HEAD~ --hard
Run Code Online (Sandbox Code Playgroud)

这使我们的分支达到与我们开始时完全相同的状态。如果我们环顾四周(参见git log),我们将看到我们撤消了合并提交并返回到之前的提交。

但!

该合并提交仍然存储在 git 的内部历史记录中。现在,让我们恢复该提交(12345abc在本例中),而不更改文件的内容,以便我们的文件保持我们想要的相同状态:

git reset 12345abc --soft
Run Code Online (Sandbox Code Playgroud)

现在,如果我们运行git status,我们将看到有阶段性的变化。这些更改是我们原始提交的文件,正是我们想要的!

现在,让我们修改合并提交,使其包含我们原始的文件集:

git commit --amend --no-edit
Run Code Online (Sandbox Code Playgroud)

最后一个命令使用 覆盖当前提交(恰好是合并提交)--amend,而不是进行新的提交,并且因为我们原始提交的文件状态就位,所以 git 用我们之前提交的文件替换了合并提交的文件。伟大的!

--no-edit标志指定仅保留相同的提交消息。

完毕!

我还没有尝试过 @SethRobertson 的方法,它可能工作得很好,但我喜欢我的方法,因为它不太脚本化,并且使用一系列基本命令来实现同样的事情。


小智 0

为了实现这一目标,您需要执行的步骤是:

  • 结帐集成分支
  • 与 master 进行 rebase (git pull --rebase master)
  • 推送集成分支
  • 结帐大师
  • 合并集成分支
  • 推送主分支。

但这仅在集成不是公共分支时才有效。如果是的话,那么你就会改写它的历史,不是什么好事。如果它是公开的,那么你唯一能做的就是将它与 master 合并,但你不会有线性历史。