2016-03-18 8 views
0

Чтобы воспроизвести это поведение, просто запустите новый репозиторий git, создайте файл, добавьте и зафиксируйте. Теперь отредактируйте этот файл еще раз (без добавления, без фиксации на этот раз) и stash. Результат должен выглядеть следующим образом:git log -1 -p stash @ {0} показывает пустой патч

$ git log [email protected]{0} --graph --decorate 
* commit C (refs/stash) 
|\ Merge: A C 
| |  WIP on master: A init 
| | 
| * commit B 
|/  index on master: A init 
| 
* commit A (HEAD, master) 
     init 

различий между A и C показывает ожидаемый результат:

$ git diff [email protected]{0}^[email protected]{0} 
diff --git a/file b/file 
index b1b7161..51bdcb4 100644 
--- a/file 
+++ b/file 
@@ -1 +1,2 @@ 
+a new uncommited change 
init 

Я бы ожидать такой же вывод для команды

$ git log [email protected]{0} 

но это не патч. Почему это происходит? (Это не относится к припрятать: Такое же поведение, если вы создаете историю, используя пустой не совершать, не-сл ...)

ответ

2

Почему это происходит?

Поскольку git log -1 -p не показывает различий для любой совершать с несколькими родителями. Для этого нужны дополнительные параметры. Как правило, вы можете выбрать git show для отображения одного фиксатора вместе с патчем, который в основном эквивалентен, но добавляет --cc в качестве опции по умолчанию. Явно добавляя, что вы получаете разницу с git log тоже.

Есть другие варианты для управления отображением слияния коммитов: вы можете использовать -c, чтобы получить более подробную форму --cc, -m, чтобы получить регулярный дифференциал для всех родителей (A и B), или объединить, что с --first-parent в получить простой diff от A до C.

+0

Возможно, вы поняли меня неправильно. Я не добавлял к индексу перед темпом. Таким образом, B содержит ту же версию файла, что и A. И изменения рабочей строки до того, как stash находятся внутри C. Если вы diff A..B, вы не получите никаких изменений. Если вы измените A..C, будет показано изменение рабочей последовательности (то же самое для B..C). Хотя A является первым родителем C, я бы предположил, что git log -1 -p должен показать изменение? – Henning

+0

@ Хеннинг Это не должно, но вы правы, я сбился с пути, извините за неправильное тестирование. Я переписал свой ответ. (Обычно полностью переписывающие ответы вроде этого не принимаются, потому что несправедливо искажать существующие голоса, но никто не голосовал по этому ответу.) – hvd

+0

Спасибо за подробное объяснение! Поэтому было бы целесообразно, чтобы git-log выбирал те же параметры diff, что и git-show. Или есть возражения? – Henning