Когда вы меняете две версии, как я могу сделать git правильно следовать истории, где был заменен файл?Как сделать git правильно diff замененным файлом
Вот пример. Я создаю файл [commit], перемещаю его [commit], затем создаю другой файл с тем же именем [commit].
echo "original" > test.txt
git add .
git commit -m "First commit"
mv test.txt test2.txt
git add --all .
git commit -m "Rename"
echo "replace" > test.txt
git add .
git commit -m "Replace"
Когда сравниваете между HEAD^^
и HEAD
, как я могу сделать мерзавец понимать, что test.txt действительно новый файл? Лучшая команда, которую я мог найти, была чем-то вроде git diff -M100% -C100% HEAD^^
, но это не дает результаты, которые я ищу.
git diff -M100% -C100% HEAD^^
diff --git a/test.txt b/test.txt
index 4b48dee..6e8b374 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-original
+replace
diff --git a/test.txt b/test2.txt
similarity index 100%
copy from test.txt
copy to test2.txt
Есть ли лучшая команда для получения ожидаемого результата?
diff --git a/test.txt b/test.txt
index 4b48dee..6e8b374 100644
--- /dev/null
+++ b/test.txt
@@ -0,0 +1 @@
+replace
diff --git a/test.txt b/test2.txt
similarity index 100%
copy from test.txt
copy to test2.txt
Большое спасибо за прямой и сквозной ответ! Это заставляет меня задаться вопросом, сделал ли кто-нибудь скрипт либо пройти историю, либо провести дорогостоящее сравнение. – m35
Майкл Хаггерти написал «git-imerge» как скрипт, который может выполнять итеративное слияние или переадресацию, которая обрабатывает историю при выполнении этих операций. Однако у него свои проблемы. См. Http://softwareswirl.blogspot.com/2013/05/git-imerge-practical-introduction.html. – torek