Подтвердить что ты не робот

Каковы практические последствия перезаписи истории GIT?

Наш проект использует git в течение недели или около того сейчас, и нам все это очень нравится (использование его в совместной совместной группе оказывается совсем другим опытом git). Чтобы все было как можно проще, мы не делаем никаких изменений или изменений в истории. Но за первую неделю мы допустили несколько ошибок. Было сделано несколько коммитов, которые не должны были быть выполнены, и нам удалось объединить ветвь функции в неправильную ветку интеграции (1.1 вместо 1.0). И мы не узнали об этих вещах, пока они не вошли в нашу историю.

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

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

  • Если я переписываю историю (и все компилируется/работает во всех затронутых ветвях), мои коллеги должны делать какие-либо специальные команды)? (Другими словами, будут ли они "знать, что я это сделал", если бы я сделал это хорошо?)
  • Будут ли какие-либо пользователи с локальными изменениями, о которых я не знаю, могут иметь право на слияние сбоев на git pull?
  • Я пропустил что-то важное здесь?

Любые ссылки на статьи/учебные пособия по этому вопросу также будут очень приятными.

4b9b3361

Ответ 1

Требуемое чтение Проблемы с историей перезаписи в руководстве пользователя Git.

Если я переписываю историю (и все компилируется/работает во всех затронутых ветвях), мои сотрудники должны делать какие-либо специальные команды (т.е. будут ли они "знать, что я это сделал", если бы я сделал это хорошо?)?

Они будут знать, и Git расскажет им в недвусмысленных выражениях, что что-то не так. Они получат неожиданные сообщения об ошибках и могут пытаться разрешить возникающие конфликты слияния, непреднамеренно возвращают предыдущие коммиты. Эта проблема создает реальное сообщение, и если вам интересно узнать, что происходит, вы всегда можете попробовать его на временной копии своих репозиториев.

Будут ли какие-либо пользователи с локальными изменениями, о которых я не знаю, могут иметь право на слияние ошибок на Git pull?

Абсолютно, см. выше.

Я пропустил что-то важное здесь?

Избегайте переписывания истории (почти) всех затрат!

Ответ 2

Как упоминалось в других комментариях к ответам, на практике каждая фиксация уникальна, и переписывание истории приведет к новым коммитам.

Вы можете думать об этом, как обрезать ветки дерева, а затем мгновенно выращивать новые. Они могут даже выглядеть одинаково, но нет. Да, магия вуду. В этой аналогии возврат был бы почти таким же, как поддержка падающей ветки с логом, поэтому он будет расти без падения.

Это приводит нас к нескольким веским причинам переписать историю:

  • Перед тем, как открыть публикацию, удалите приватный репозиторий: например, создайте новую локальную частную ветвь, протестируйте, протестируйте, перепишите, нажмите.
  • Перед публикацией удалите конфиденциальные данные из частного репо.

Те уже показывают, что Грег уже сказал: переписывание истории потенциально может испортить всех, если репозиторий публично (push-commits). Причина, почему я также выступаю за то, чтобы избегать ее вообще любой ценой даже в частных репозиториях, просто чтобы сохранить хорошую привычку: и поэтому переписывать историю следует избегать любой ценой (это означает просто дать достаточно внимания перед тем, как сделать это: весить плюсы и минусы!)

И есть, по крайней мере, еще одна философская и пропущенная причина: переписанная история - потеря данных. Правда, история git с revert может выглядеть более беспорядочной, чем reset. Но если правильно написано, все, что "беспорядок" может быть скрыто в отдельных ветвях, и все же мы можем точно видеть, в какой момент был сделан возврат. И даже с указанием причин или доказательств того, почему это было сделано.

Вернемся к аналогии дерева, даже если вы удалите вспомогательный журнал, вернувшаяся ветвь покажет извилистые растущие кривые, и это красиво!