微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法告诉 git 在差异中将哪些行视为修改过的?

如何解决有没有办法告诉 git 在差异中将哪些行视为修改过的?

修改一个文件(在 Ruby 中,碰巧,但我的问题实际上是关于 Git)通过将一个方法向上移动文件。这是一个伪差异:

class A
  # some stuff

+ def b
+ end
+
  private

  def a
  end
- 
- def b
- end
end

然而,git 坚持将这种变化定义为:

class A
  # some stuff
 
- private
-
- def a
- end
-
  def b
  end
+
+ private
+
+ def a
+ end
end

即。它认为 private 关键字和方法 a下移

这在描述文件如何更改方面同样正确,但它几乎也没有传达更改的意图。甚至可能有点令人困惑:更改的结果是使方法 b 成为公共方法,但这种差异使它看起来好像更改了方法 a

我认为 Git 选择了这个差异是因为方法 a方法 b 略短,所以这最终会产生一个略小的差异。但是,为了使我的提交易于理解,最好让差异看起来更像这里的第一个示例,以明确相关更改是针对方法 b

我的问题是:是否有任何方法可以手动编辑 Git 在我进行此更改时选择的大块内容,以便我可以创建一个提交,其 diff 看起来像第一个示例而不是第二个示例?

解决方法

我的问题是:是否有任何方法可以手动编辑 Git 在我进行此更改时选择的大块内容,以便我可以创建一个提交,其 diff 看起来像第一个示例而不是第二个示例?

没有;提交不存储差异,它们存储文件在当前时间点的快照。所以你不能“创建一个提交”,它的差异看起来像某种方式;相反,差异是在您查看时立即创建的。

这意味着每个 git 客户端在查看您的提交时都需要了解如何根据您的喜好显示差异。没有这样的机制来告诉 git 客户端你希望它如何被看到。

提交的查看者可以使用多种选项来指示他们希望如何看到更改,但是没有机制可以可以用来告诉他们你希望他们如何看到变化。

,

看看git diff --help。有很多选项可以指定 git 将使用哪种差异算法。

   --diff-algorithm={patience|minimal|histogram|myers}
       Choose a diff algorithm. The variants are as follows:

       default,myers
           The basic greedy diff algorithm. Currently,this is the default.

       minimal
           Spend extra time to make sure the smallest possible diff is produced.

       patience
           Use "patience diff" algorithm when generating patches.

       histogram
           This algorithm extends the patience algorithm to "support low-occurrence common elements".

我不知道它们之间有什么区别,但我会开始寻找。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?