Git diff-дерево показывает удаление, но в журнале Git нет удаления - PullRequest
4 голосов
/ 03 мая 2011

git diff-tree указывает, что файл был удален, но когда я запускаю git log, он ничего не показывает.

Для остроумия:

> git diff-tree --stat --summary 1990ca669fe..00de228dcdc -- t/tests.conf
t/tests.conf |    9 ---------
1 files changed, 0 insertions(+), 9 deletions(-)
delete mode 100644 t/tests.conf

И когда я бегу:

> git log 1990ca669fe..00de228dcdc -- t/tests.conf

Я не получаю вывод.

Есть ли у меня какие-либо идеи относительно того, как я могу отследить, почему git считает, что этот файл был удален, поскольку он также вызывает проблемы при объединении, которое я пробую?

Обновление

Это также не приводит к выводу:

> git log 1990ca669fe...00de228dcdc -- t/tests.conf

И коммиты достижимы:

 > git rev-list 00de228dcdc | grep 1990ca669fe
  1990ca669fe9ec94d215945388458daba8d94747

1 Ответ

8 голосов
/ 03 мая 2011

Я предполагаю, что 1990ca669fe и 00de228dcdc имеют разные истории (ни один из них не доступен).Вы, вероятно, хотите эту команду (три точки, а не две):

git log 1990ca669fe...00de228dcdc -- t/tests.conf

Она будет отображать коммиты с каждой стороны истории (а не только коммиты, ведущие к 00de228dcdc).

Вкратце:
Чтобы увидеть «вещи» с обеих сторон (A и B), используйте git diff A..B и git log A...B.
. Чтобы получать «вещи» только с вторая сторона (B), используйте git diff A...B и git log A..B.

Это весьма неудачный интерфейс пользователя.


Команды «log» предназначены для просмотраГраф истории («диапазоны» коммитов или наборы коммитов).
Они интерпретируют A..B как эквивалент B --not A (т. е. набор коммитов, которые достижимы из B, но не из A).A...B эквивалентно A B --not $(git merge-base --all A B) (т. Е. Множество коммитов с обеих сторон, поскольку они расходятся; это называется «симметричной разностью A и B»).

Команды «diff» предназначены для сравнениядва отдельных дерева или пятна (только «конечные точки», (в основном), а не история, которая может их связать).Они интерпретируют A..B как эквивалентное A B (то есть просто еще один способ напрямую указать конечные точки для операции diff).A...B эквивалентно
$(git merge-base A B)..B или $(git merge-base A B) B (это с учетом истории, таким образом, «в основном» выше).

С git-diff (1):

"diff" означает сравнение двух конечных точек , не диапазонов, и обозначений диапазонов (" .. " и« ... ») не означает диапазон, определенный в разделе «УКАЗАНИЕ ДИАПАЗОНОВ» в gitrevisions (7) .


Давайте рассмотрим git log A..B и git diff A..B для двух разных типов истории.

Если A и B линейно связаны (показано ниже),

---1---2---A---3---4---B

, то вы увидите похожий результатдля обоих типов команд.git log A..B покажет коммиты 3, 4 и B. git diff A..B покажет разницу между деревьями, на которые ссылаются коммиты A и B;эта разница будет эквивалентна накоплению патчей, представленных коммитами 3, 4 и B.

Три-точечные версии неинтересны, так как базой слияния A и B является сама A.Для команд «log» A...B означает A B --not $(git merge-base --all A B), что в итоге равно
A B --not A, что означает B --not A, что совпадает с A..B.Для команд «diff» A...B означает $(git merge-base A B)..B, что в итоге равно A..B.

Однако, если A и B имеют расходящиеся истории (ни одна из них не достижима от другой; проиллюстрировано ниже),

---1---D---3---4---A
        \
         5---6---B

, тогда в diff будут внесены изменения из обеих веток, а в журнале будут показаны только коммиты, сделанные в одну из ветвей.git log A..B покажет коммиты 5, 6 и A. git diff A..B покажет разницу между деревьями, на которые ссылаются коммиты A и B;этот diff будет включать патчи, представленные коммитами 5, 6 и B, а также 3, 4 и A.

В этом случае интересны варианты с тремя точками.Для команд «log» A...B означает
A B --not $(git merge-base --all A B), что в конечном итоге означает A B --not D, которое в конечном итоге расширяется до набора 3, 4, A, 5, 6, B (то есть коммитов, которые достижимы изА или Б, но не оба).Для команд «diff» A...B означает $(git merge-base A B)..B, что в итоге равно D..B (т. Е. Все изменения, сделанные на «стороне B» с тех пор, как B отклонился от A).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...