Git - 如何合并分支,但忽略其中一个更改

问题描述 投票:0回答:1

我有两个 C# 解决方案。一个是 nuget 项目 - 另一个解决方案 (AccountServer) 使用的库 (CodeFirstWebFramework)。

在我的主 Account Server 分支上,解决方案仅包含 AccountServer,以及对 CodeFirstWebFramework 的 nuget 引用。

但是,我最近对 CodeFirstWebFramework (CFWF) 进行了大量更改,并且我想针对 AccountServer (AS) 测试它们。由于 nuget 的工作方式,每次我想测试 CFWF 的更改时,我都必须增加内部版本号,然后更新 AS 中的包。

我发现一种更简单的工作方法是删除 nuget 引用,并将 CFWF 项目包含在 AS 解决方案中。我在一个分支中执行此操作,因为我还有其他人使用该代码,并且我希望他们能够继续使用 nuget。

当我完成测试后,我想将所有对 AS 的更改合并回主分支,排除更改解决方案文件的一次提交

我知道我可以使用樱桃选择来做到这一点,但是 我希望再次使用它,所以我想让 git 处于它认为已经合并了两个分支的状态,这样以后的合并就可以继续进行。

我所做的是合并分支,然后恢复一次提交。然而,我现在的情况是,我对 AS master 有新的更改,我想将其合并回分支,这样我就可以创建和测试对 CFWF 的更多更改。所以我处于同样的情况 - 我想将 master 合并到分支中,排除恢复解决方案更改的提交

我这可能吗?

Master------------------------------merge-revert change solution-change code
 \                                  /                                       \
  Branch-change solution-change code----------------------------------------???
git merge cherry-pick
1个回答
0
投票

当您想要合并并排除给定的更改时,您可以运行 git merge --no-commit,然后以您想要的方式编辑文件(更改将被应用,因此您可以按照您想要的方式编辑文件)然后用

git add the-file; git merge --continue
包起来。这样一来,这一变化当然就会载入史册。

如果您希望从历史记录中删除该提交,请重写该分支,以便它看起来像需要首先发生提交。重写历史在技术上总是可行的但是你应该小心不要重写已经被其他人共享和使用的提交。一般来说,在没有其他人使用的功能分支中,可以重写历史记录以删除此类提交。最简单的方法是使用

git rebase -i
:

git rebase -i <commit-to-delete>~ # careful: keep the pigtail!!!

你将得到一个提交列表,第一个应该是你想要删除的......只需注释掉该行,保存,退出并让 git 运行它是神奇的。完成后,提交不应再出现在分支的历史记录中......从这一点开始遵循您的惯例。

© www.soinside.com 2019 - 2024. All rights reserved.