#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