Как увидеть diff из HEAD, только для необработанных файлов? - PullRequest
0 голосов
/ 05 марта 2019

После исправления конфликта слияния я хочу увидеть фактическую разность моих неопрятных файлов до и добавить их для разрешения конфликта.

Я могу видеть различия всех файлов с git diff HEAD, но это также показывает мне различия неконфликтующих файлов.

Я вижу неотправленные файлы с git diff, но это показывает мне конфликт, а не фактическую разницу.

Как увидеть разницу между HEAD и фактическим содержимым файлов, только для конфликтующих файлов?


Вот как создать репро (в пустой директории):

git init
# Create files foo.txt and bar.txt on master.
git commit --allow-empty -m "Initial commit"
echo 'foo content' > foo.txt
echo 'bar content' > bar.txt
git add .
git commit -m A
# Create a branch "b" that change both files.
git checkout -b b
echo 'Foo content' > foo.txt
echo 'Bar content' > bar.txt
git add .
git commit -m B
# Get back on master and add a commit that change foo.txt.
git checkout -
echo 'foo content and more' > foo.txt
git add foo.txt
git commit -m C
# Try to merge b in master: CONFLICT!
git merge b
# Fix the conflict.
echo 'Foo content and more' > foo.txt

Теперь git diff HEAD дает мне список всех изменений, включая bar.txt, который не является конфликтующим:

diff --git a/bar.txt b/bar.txt
index 085e7f5..6401b08 100644
--- a/bar.txt
+++ b/bar.txt
@@ -1 +1 @@
-bar content
+Bar content
diff --git a/foo.txt b/foo.txt
index 6633fd8..a65c68b 100644
--- a/foo.txt
+++ b/foo.txt
@@ -1 +1 @@
-foo content and more
+Foo content and more

С другой стороны, git diff дает мне только конфликтующие файлы, но не показывает фактическую разницу между фактическим содержимым на диске и HEAD.

diff --cc foo.txt
index 6633fd8,6fc4556..0000000
--- a/foo.txt
+++ b/foo.txt
@@@ -1,1 -1,1 +1,1 @@@
- foo content and more
 -Foo content
++Foo content and more

Мне нужна команда с тем же выводом, что и git diff HEAD -- foo.txt, но без указания конфликтующих файлов.

git diff --magic-flag HEAD

diff --git a/foo.txt b/foo.txt
index 6633fd8..a65c68b 100644
--- a/foo.txt
+++ b/foo.txt
@@ -1 +1 @@
-foo content and more
+Foo content and more

1 Ответ

0 голосов
/ 06 марта 2019

Эта команда, кажется, делает работу:

git diff HEAD -- $(git diff --name-only --diff-filter=U)

Я присвоил ему псевдоним git dhu ( d если h ead u nmerged), в ~/.gitconfig:

[alias]
dhu = !git diff HEAD -- $(git diff --name-only --diff-filter=U)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...