了解 git diff 和 git cherry-pick 的工作原理

Understanding how git diff & git cherry-pick works

这是回购回购:https://github.com/sathishsoundharajan/git-diff

步骤

  1. 在 github 中创建了新的存储库。
  2. 创建主分支。
  3. 已将 master.txt 文件添加到 master 分支并提交。
  4. 从 master 创建了名为 feature-branch 的新分支。
  5. 已将 feature.txt 文件添加到功能分支并提交。
  6. 切换到主分支。
  7. 向 master 分支添加了一个新文件 new-master.txt 并提交了 ( CommitId: https://github.com/sathishsoundharajan/git-diff/commit/593da755a9ea90b6f55bcc6d184f249218bf4170)
  8. 现在,由于某种原因,我必须挑选这个提交到功能分支。
  9. 切换到功能分支。
  10. 使用git cherry-pick 593da755a9ea90b6f55bcc6d184f249218bf4170。精心挑选,没有冲突,但 commit_id 更改为 https://github.com/sathishsoundharajan/git-diff/commit/e58427c82322d6a3ec933741887f5b8312981e11
  11. 现在,如果我们从 feature-branch 向 master 提出拉取请求/在 master 和 feature-branch 之间进行 git 差异,我应该只会在差异中看到 feature.txt 文件。但我也可以在 diff 中看到 new-master.txt 文件 https://github.com/sathishsoundharajan/git-diff/pull/1

问题:

  1. 为什么 commit-id 在 cherry-pick 之后改变了?
  2. 我们可以停止 cherry-pick 以不创建新的 commit-id 并重用现有的吗?
  3. 为什么在 git diff 中我看到了 new-master.txt,即使它已经在 master 分支中了?
  4. 有没有办法让 git 不显示这个差异?
  5. 有没有一种方法可以在不比较提交 ID 的情况下通过比较文件中的实际更改来查看两个分支之间的差异?

1 因为历史不同所以 ID 不能相同 security/cryptographic 原因。

2 不,相关的 ro #1 ...如果你有相同的 ID,那就意味着你发现了碰撞(或者你正在生成完全相同的对象,就像 git svn 所做的那样)。 . 理论上可行但是....

3 因为在 PR/MR 中,您看到的差异不是两个分支的提示之间的差异,而是因为 feature 分支已启动 ,说(如果你得到什么尝试 git diff... 而不是 ..)。如果您看到分支的 2 个 tlps 之间的差异,代码审查将是地狱,因为您会看到 MR/PR 本身的更改以及自 MR/PR 分支启动以来目标分支中引入的更改(更不用说随着更多的东西被合并到目标分支,这些变化会随着时间的推移而改变)。谁愿意那样工作?

4 喜欢 2 个分支提示之间的差异吗?尝试使用 .. 而不是 ...。现在,在 github 上?如果他们认为有必要,他们可能会提供该选项,但我认为您不会发现很多客户会感兴趣.... 然后是关于他们的,而不是关于 git.

5 你是什么意思?