git 取消合并一个分支

git unmerge a branch

我正在使用 Mac 的 sourceTree 作为我的 GUI,因此我希望得到有关使用它的说明,但显然我想学习 bash 命令作为我的第一语言。

我们有一个名为 develop 的远程仓库,惯例是,当您开发一项功能时,您会从 develop 为该功能创建一个分支,例如 feature1 ,拉下来,然后在你创建的分支上提交拉取请求。

我最近开发了一些分析工具,但我不想将其放入远程代码库(无论如何)。

我如何在本地将我的 analysis 分支与我的 feature1 分支合并以进行测试,然后在完成后取消合并 analysis

合并时我应该检出哪个分支,feature1还是analysis

注意:我想保留合并分支时对 feature1 所做的所有文件更改;来自 analysis 的文件和编辑极不可能与我的功能分支发生冲突,因此基本上我添加了一些不冲突的代码,然后将分支拉出;所以我对 feature1 所做的任何承诺,我都不想丢失。

要取消合并分支,您可以像这样简单地git revert合并提交:

git checkout feature_branch
git revert -m 1 <merge_commit_sha>

您可能会遇到一些冲突,您必须手动取消合并,就像正常合并时一样。

tl;博士

我建议您将分析工具作为单独的代码在其自己的源代码管理下进行处理,并且永远不要将其合并到您的功能分支中。将其保存在具有自己的 git 存储库和 .git 从更高级别的存储库中忽略的文件夹中。

详细解释

我这样理解对吗:

  1. 您有单独的分析代码,用于开发但未成为功能代码的一部分,
  2. 而且它不应该成为共享代码库的一部分,
  3. 但是你想在开发的时候在项目中使用它?

如果是这样的话:

  1. 合并根本不是办法。通过合并,您将代码带入提交中,稍后将被推送到开发回购。它 将仍然存在 在远程代码库中,在每个功能分支的几个中间提交中。 (这可以用 git filter-branch 解决,但我认为这是用蒸汽压路机压死一只苍蝇。不值得。)
  2. 您很可能会开发自己的分析工具,因此它需要自己的版本控制和源代码控制。

解决方案

在你的项目中创建一个特殊文件夹并将其放入.gitignore:

/analysis/*

如果您使用 Maven 或其他一些暗示严格结构策略的工具,这可能是 /../../../../../analysis,但这没有区别。

将所有与分析相关的代码都放在该文件夹中。在那里启动一个单独的回购并在开发工具时进行提交。

像以前一样使用功能分支。您现在更改的唯一文件是您的 .gitignore。在你推送到远程之前,做:

git checkout <sha-of-branching-time-commit> -- .gitignore
git commit -m'fixed .gitignore'

这 returns master-repo .gitignore 到初始状态。您可能想要备份修改后的 gitignore 以备将来使用。

您可以选择与您的团队达成协议,指定一个“这是我的代码,我不会分享它”的文件夹。然后可以加上common .gitignore