Git 合并,忽略对某些文件的更改(我们的与他们的)

Git Merge, Ignoring Changes to Certain Files (Ours vs Theirs)

设置

一家公司正在为我们做一些工作,从 master 分叉出来,并且一直在针对专用于这项工作的功能分支打开拉取请求。我们(目前)没有转译器,当我要求公司从前端取出任何 ES6+ 符号时,他们也改变了后端的符号。这既没有必要,而且在很多情况下更难阅读。

问题

我想合并 PR,但仅将某些文件更改合并到我的 develop 分支。我如何忽略对某些文件的更改或仅恢复那些文件,从而产生一个我可以拉入我的 develop 分支的提交,最好是通过另一个 PR?

有什么想法吗?

我很紧张在提交树上上下移动,所以我更喜欢总是分支和合并。下面是远远超过需要完成的工作,但我喜欢回归路径,以防出现任何问题。 欢迎大家提出建议。

  1. 记下功能分支头的提交哈希,以备后用。
  2. 从功能分支创建一个 "clean" 分支。
  3. 将 PR 合并到功能分支中。
  4. 从上一次提交中检出要还原的文件
    • git checkout *commit* -- file/path/one.js file/path/two.js
  5. 提交阶段性更改
  6. 将 PR 创建回您的功能分支

更快的方法是:

  1. 记下功能分支头的提交哈希,以备后用。
  2. 将 PR 合并到功能分支中。
  3. 从上一次提交中检出要还原的文件
    • git checkout *commit* -- file/path/one.js file/path/two.js
  4. 提交阶段性更改

这两种策略都会创建一个新的提交,以将文件重写回 PR 之前的状态。

注意:查看@Frax 的回答以获得更清晰的命令行变体。

它可能并非在所有情况下都有效,但似乎在您的情况下应该有效:只需在合并前还原更改

鉴于您的拉取请求是从分支 pull-requestdevelop,那可能只是:

git checkout pull-request
# check out files from develop, they will be immediately staged
git checkout develop -- file/to/revert other_file/to/revert
git commit -m 'Reverted files that should be reverted'
git push origin pull-request

这应该添加拉取请求以不再包含有问题的文件,因此您可以简单地合并它。