Как коммит исчезает из журнала одного файла? - PullRequest
9 голосов
/ 24 сентября 2011

Итак, я внес изменения в файл, перенес его в наш основной репозиторий, увидел его там. Дэвид вытащил из этого репо и сделал - ну, что-то - и не мог видеть мои изменения. Поскольку Дэвид - типичная жертва Microsoft, я попросил его отправить то, что у него было, в репозиторий, и я посмотрю на это там.

git log --name-only производит

commit 194b7f5dbb59d29ace340a376f10906752978db5
Merge: 484df79 afc2dec
Author: David Good <david@company.com>
Date:   Sat Sep 24 11:47:14 2011 -0700

[ David's merge ]

commit afc2dec4a828de05350c39526eeecf9d3a15e465
Author: Michael <info@company.com>
Date:   Sat Sep 24 10:58:54 2011 -0700

[ my changes ]

backend/theimportantfile.js

commit e4e2f9ce9df3adf5ed0547ed16521eb742cc2ac1
Author: Michael <info@company.com>
Date:   Sat Sep 24 10:47:09 2011 -0700

[ some other thing ]

но git log backend/theimportantfile.js производит

commit eb470fe1792220779b14e90337f74fb216fc9f7f
Author: David Good <david@company.com>
Date:   Mon Sep 12 17:20:25 2011 -0700

[ comment ]

commit 63ddd2be020092a4bf65d1eac106ece5fd7fbbd3
Author: David Good <david@company.com>
Date:   Fri Sep 9 16:23:53 2011 -0700

[ comment ]

Итак, согласно git, backend/theimportantfile.js не затрагивался неделями, но также был изменен два часа назад с фиксацией afc2dec. Как я могу отследить, что случилось?

Ответы [ 3 ]

2 голосов
/ 25 мая 2013

Я не уверен, является ли это природой вашей проблемы, но по умолчанию git log иногда отфильтровывает коммиты, которые он считает "не полезными" или "интересными", чтобы понять окончательное состояние дерево коммитов. От git log документов :

Иногда вас интересуют только части истории, например коммиты, модифицирующие конкретный . Но есть две части Упрощение истории , одна часть выбирает коммиты, а другая - как это сделать, поскольку существуют различные стратегии для упрощения истории.

Следующие параметры влияют на способ упрощения:

Default mode
Упрощает историю до самой простой истории, объясняющей конечное состояние дерева. Проще всего, потому что он сокращает некоторые боковые ветви, если конечный результат один и тот же (то есть объединение ветвей с одинаковым содержимым).

Вместо того, чтобы использовать режим по умолчанию, вы можете передать флаг --full-history в вашем файле и посмотреть, обнаружится ли «пропущенная» фиксация таким образом:

git log --full-history -- backend/theimportantfile.js

Из git log документов:

--full-history
То же, что и режим по умолчанию, но не удаляет некоторую историю.

Редактировать

Я знаю, что иногда это работает, потому что я столкнулся с ситуацией, когда у меня был коммит X в master, который содержал изменение в файле theFile. Коммит X был затем выбран сотрудником в anotherBranch, поэтому давайте назовем новый коммит Y. Затем anotherBranch был объединен в master.

Когда мы сделали

git log -- theFile

мы бы не увидели Y в списке коммитов, просто X, но когда мы использовали

git log --full-history -- theFile

только тогда появятся и X, и Y. Я думаю, что Git не показывал Y по умолчанию, потому что он внес идентичное изменение в конечное состояние дерева коммитов, так как он был выбран из X.

2 голосов
/ 04 октября 2011

Похоже, что слияние Дэвида - это то, что вы сделали. Я говорю это потому, что слияние, похоже, "отменило" ваши изменения.

#this command will show you if anything 'strange' happened during the merge"

git show 194b7f

Если эта команда не дает интересного вывода, то Дэвид, возможно, слился«наша» стратегия или «умный» cp мои файлы во временную папку;мерзавец слияния;перезаписывать конфликтующие файлы;Рабочий процесс git commit.

Независимо от того, как было получено это состояние, слияние необходимо отбросить и повторить, поскольку оно явно неисправно.Вы также можете рассмотреть возможность изменения вашего рабочего процесса таким образом, чтобы Дэвид больше не нуждался в слиянии, а скорее отправлял неформальные (или формальные) «запросы на извлечение», и вы позаботились о слиянии.

1 голос
/ 27 октября 2011

Похоже, что он, возможно, имел конфликт слияния и решил его, приняв его версию (которая, вероятно, была несуществующим файлом) вместо вашей. Вы можете вернуть файл обратно. См. , как восстановить файл или папку

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