繁体   English   中英

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

[英]Understanding how git diff & git cherry-pick works

这是repro repo: https : //github.com/sathishsoundharajan/git-diff

脚步

  1. 在 github 中创建了新的存储库。
  2. 创建了主分支。
  3. 将 master.txt 文件添加到 master 分支并提交。
  4. 从 master 创建了一个名为 feature-branch 的新分支。
  5. 将 feature.txt 文件添加到功能分支并提交。
  6. 切换到主分支。
  7. 添加一个新文件 new-master.txt 到 master 分支并提交( 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 diff,我应该只在 diff 中看到 feature.txt 文件。 但我也可以在差异https://github.com/sathishsoundharajan/git-diff/pull/1 中看到 new-master.txt 文件

问题:

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

1 因为历史不同,因此出于安全/加密原因,ID 不能相同。

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

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

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

5 你是什么意思?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM