我听说git管理文件的差异,而不是整个文件,以使存储库更小。 git diff
显示提交的行添加和删除(甚至是多次提交)。此外,git可以应用*.patch
文件。
但是在这里:我如何重新排序提交差异的更改行?例如,假设我更改了文件
a = new A() {
@Override
method1() {
do_something();
}
};
b = new B() {
@Override
method2() {
do_whatever();
}
};
c = new C() {
@Override
method3() {
do_nothing();
}
};
到
c = new C() {
@Override
method3() {
do_nothing();
}
};
b = new B() {
@Override
method2() {
do_whatever();
}
};
a = new A() {
@Override
method1() {
do_something();
}
};
只是重新排序三个作业。
对于此提交,git diff
显示
diff --git a/a b/a
index cd702e1..7baebbe 100644
--- a/a
+++ b/a
@@ -1,7 +1,7 @@
-a = new A() {
+c = new C() {
@Override
- method1() {
- do_something();
+ method3() {
+ do_nothing();
}
};
b = new B() {
@@ -10,9 +10,9 @@ b = new B() {
do_whatever();
}
};
-c = new C() {
+a = new A() {
@Override
- method3() {
- do_nothing();
+ method1() {
+ do_something();
}
};
这是不合逻辑的,因为@Override
关键字无法正常移动。
我希望得到类似的内容:
-a = new A() {
- @Override
- method1() {
- do_something();
- }
-};
+c = new C() {
+ @Override
+ method3() {
+ do_nothing();
+ }
+};
b = new B() {
@Override
method2() {
do_whatever();
}
};
-c = new C() {
- @Override
- method3() {
- do_nothing();
- }
-};
+a = new A() {
+ @Override
+ method1() {
+ do_something();
+ }
+};
但是当我创建补丁文件并重新排序它并将其作为提交应用时,该提交也与前一个(git diff
未移动)具有相同的@Override
。
对于包含复杂行更改的提交,git diff
的默认策略无法反映更改的含义。 (这会给同行评审带来困难。)此外,(虽然这是一种意见),如果没有像我的意思那样管理线路的变化,就会发生冲突。
如何更改提交更改行的顺序
答案 0 :(得分:3)
我听说git管理文件的差异,而不是整个文件,以使存储库更小。
这是不正确的。 Git将文件内容存储为快照(整个文件),而不是增量或差异。您问题中粘贴的差异会在被要求时按要求计算。
Git支持各种diff算法,您可以选择使用哪种算法。一种选择是耐心算法。它不会产生您想要的差异,但它比默认算法更接近。这是一个例子:
diff --git a/a b/a
index cd702e1..7baebbe 100644
--- a/a
+++ b/a
@@ -1,18 +1,18 @@
-a = new A() {
- @Override
- method1() {
- do_something();
- }
-};
-b = new B() {
- @Override
- method2() {
- do_whatever();
- }
-};
c = new C() {
@Override
method3() {
do_nothing();
}
};
+b = new B() {
+ @Override
+ method2() {
+ do_whatever();
+ }
+};
+a = new A() {
+ @Override
+ method1() {
+ do_something();
+ }
+};
您可以使用--diff-algorithm
选项指定算法。
git diff --diff-algorithm=patience
git-diff(1)中列出了可用的算法,我将在此引用它:
--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".
For instance, if you configured diff.algorithm variable to a
non-default value and want to use the default one, then you have to
use --diff-algorithm=default option.