假设我修改了一个已经进行版本控制的文件,并且使用非GIT方式将其重命名,但我只想包含该文件的部分差异。我该怎么做?
问题在于GIT只能添加完整的新文件。
这种情况可能更好地通过示例理解:
现在我的选择是什么,只提交将"2"的行更改为 "2 I am now file 2.txt" 和重命名的更改,而不提交添加 '6' 行的更改。由于IDE中可能存在许多重命名,因此外部重新更名并使用 git mv 不是真正的解决方法。基本上,我希望获得通过执行 git mv 1.txt 2.txt 正常情况下会有的情况,在这种情况下,您可以交互式地选择要提交的 2.txt 中的哪些行。
问题在于GIT只能添加完整的新文件。
这种情况可能更好地通过示例理解:
$ mkdir temp
$ cd temp
$ git init
$ nano 1.txt
$ cat 1.txt
I am file 1.txt
2
3
4
5
$ git add 1.txt
$ git commit -m "1st commit"
$ #edit some stuff and rename using something else than git
$ cat 2.txt #note, 1.txt is renamed to 2.txt
1 I am file 1.txt
2 I am now file 2.txt
3
4
5
6
$ #note the line with '6 'is added
现在我的选择是什么,只提交将"2"的行更改为 "2 I am now file 2.txt" 和重命名的更改,而不提交添加 '6' 行的更改。由于IDE中可能存在许多重命名,因此外部重新更名并使用 git mv 不是真正的解决方法。基本上,我希望获得通过执行 git mv 1.txt 2.txt 正常情况下会有的情况,在这种情况下,您可以交互式地选择要提交的 2.txt 中的哪些行。
mv 2.txt 1.txt
(不是git mv
,而是mv
)可以解决问题,因为git会跟踪文件的名称。 - Mathrm 1.txt
命令也能产生你期望的效果,因为如果两个文件足够相似,git会将2.txt
视为是1.txt
:https://dev59.com/FnRC5IYBdhLWcg3wCMg6#433142 - Mathgit mv --cached oldfile newfile
来实现这个目标。不幸的是,--cached
在git mv
中无法使用(只能在git rm
中使用)。 - Ajedi32