在git工作树中,我有一个文件“ foo”。我对该文件进行了重大修改,然后将其重命名为“ bar”。 Git将其检测为已删除/新文件。根据{{3}},为使git检测到它们是同一文件,应首先提交移动,然后进行修改。鉴于文件已被修改并移动(但尚未暂存或提交),那么首先要执行移动操作,然后进行修改(确保我不会在此过程中丢失修改)的遵循的程序是什么?>
类似地,如果已经在单个提交中提交了移动/修改,那么执行此步骤的程序是什么?
答案 0 :(得分:2)
老实说,最安全的做法是:
$ mv bar bar.safe # move bar someplace safe
$ git checkout foo # get the old copy of foo
$ git mv foo bar # tell git about the move
$ git commit -m 'I moved foo to bar'
$ mv bar.safe bar
$ git add bar
$ git commit -m 'But bar is totally changed now'
如果已经提交了移动/修改,最安全的方法是撤消提交(默认为--mixed
模式,更改索引但保持工作目录不变):
$ git reset HEAD^
,然后使用上述步骤。
从技术上讲,您可以使用git update-index
来独立于工作目录的内容直接操作索引(请参阅--cacheinfo
参数),但是我认为上述方法更简单。