Файл отсутствует в новейшей фиксации

#git #merge

#git #слияние

Вопрос:

недавно мы столкнулись со странным поведением нашего git на работе, и поскольку никто по-настоящему не понял, как это произошло, я собираюсь попробовать здесь 😉

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

Теперь давайте сначала более подробно опишем проблему, которую мы видели, а затем я опишу рабочий процесс, который мы используем (поскольку я боюсь, что это было просто так. Проблема в нашем рабочем процессе)

У нас был файл. Давайте назовем это index.php . Мы объединили ветку master (где состояние было правильным) в develop ветку, и файл не получил никаких обновлений.

После дальнейшей проверки мы обнаружили следующее

git log -p index.php

 commit 4689e60f87df4af989b7020a90b1cb186c6d5e04
Author: A Colleague
Date:   Fri Sep 25 14:50:24 2020  0200

    Message // We did some stuff

diff --git a/index.php b/index.php
index cfde79447..b82010ac5 100644


commit 176a2c3142dfd4c20606f0838e99efbd55da91a4
Author: Another Colleague
Date:   Mon Apr 29 08:42:14 2019  0200

    Message // Did some other stuff

diff --git a/index.php b/index.php
old mode 100755
new mode 100644
index 264b5a5b2..cfde79447
 

Мы поняли, что изменений, которые я только что зафиксировал, там не было. Почему бы и нет? Мы изучили это подробнее, и я запустил

git log -p --follow index.php и посмотрите и вот. Мы получили недостающий коммит

 commit 854ba270959151982c2ccc14573a47ae5ea568cc
Author: Me Myself and I
Date:   Wed Nov 11 18:57:46 2020  0100

    Changes // I did the stuff I needed

diff --git a/index.php b/index.php
index cfde79447..b3f7bd07e 100644


commit 4689e60f87df4af989b7020a90b1cb186c6d5e04
Author: A Colleague
Date:   Fri Sep 25 14:50:24 2020  0200

    Message // We did some stuff

diff --git a/index.php b/index.php
index cfde79447..b82010ac5 100644


commit 176a2c3142dfd4c20606f0838e99efbd55da91a4
Author: Another Colleague
Date:   Mon Apr 29 08:42:14 2019  0200

    Message // Did some other stuff

diff --git a/index.php b/index.php
old mode 100755
new mode 100644
index 264b5a5b2..cfde79447
 

Итак, что я также увидел (как видно в последней строке каждого сообщения журнала фиксации. Мы видим изменение хэша. Я не совсем уверен, для чего именно предназначен этот хэш. Однако, как вы можете видеть, отсутствующий коммит, который я искал, имел другое начальное значение. Он использовал один из коммитов перед фактическим коммитом перед его фиксацией.

В соответствии с man git log флагом follow следует за историей коммитов даже при изменении имен файлов. Однако я не вижу никаких указаний на измененное имя файла?

Я полагаю, что это главный вопрос. Однако я не уверен, как это произошло / как это предотвратить и как правильно это исправить, если это произойдет снова

Объяснение того, как мы работаем с git

По соображениям простоты

У нас есть два репозитория. Репозиторий A и репозиторий B

Каждый репозиторий содержит не менее 3 брендов

  • мастер
  • выпуск
  • разработка

Если мы работаем над функциями, мы создаем новую ветку из основного дерева, объединяем ее с no-ff в разработку. Как только клиент заявляет, что готов к выпуску, ветка объединяется через no-ff в выпуск ветки

Теперь может случиться так, что нам нужно скопировать материал из репозитория A в репозиторий B.

Вот как мы это делаем прямо сейчас.

  • Мы переходим в Репо A.
  • Добавьте репозиторий B в качестве удаленного репозитория
  • создайте новую удаленную ветку в репозитории B
  • вишневый выбор всех изменений в этой удаленной ветке
  • объедините эту удаленную ветку через no-ff в целевую удаленную ветку

Я открыт для идей / решений, что вызвало это, и если у вас есть какие-либо вопросы, просто зайдите и спросите 🙂 Спасибо!

Редактировать: как указано в комментарии, вывод для git log --graph --oneline --all

Коммит, который я добавил позже, теперь является вторым в строке. И я понятия не имею, почему

 ...

* 4689e60f8 Message // We did some stuff
| diff --git a/index.php b/index.php
| index cfde79447..b82010ac5 100644

...    
| * 854ba2709 Changes // I did the stuff I needed
|/  
|   diff --git a/index.php b/index.php
|   index cfde79447..b3f7bd07e 100644

 

Комментарии:

1. Было бы полезно сказать git log --graph --oneline --all и показать начало этого, чтобы мы видели, как коммиты связаны друг с другом.

2. В любом случае, разве это не просто презентационный аспект того, как git log ведет себя при переименовании файла и регистрации по имени файла? И ничто из того, что вы сказали, не имеет никакого отношения к тому, где находится HEAD, поэтому трудно понять, что это делает в вашем названии.

3. Извините. Я думал, что это ЗАГОЛОВОК файла. Я удалил его из заголовка 🙂 И переименование было моей ошибкой. Вчера было поздно, и я перепутал html и php при анонимизации имени файла. Файл так и не был переименован. Я также добавил вывод, как вы просили. Спасибо

4. Хорошо, так что я все еще не понимаю, в чем проблема. Ваш первый вывод журнала отслеживает историю файла в этой ветке. 854ba2709 находится в другой ветке, поэтому он не отображается.

5. извините за поздний ответ. Но почему это должно быть в другой ветке? Ты знаешь это? Я явно объединил ветку, в которой были эти коммиты, в ветку, из которой я показываю журнал git