Насколько я пытался избежать этого, я должен поддерживать три ветви master
-эквивалентные с незначительными изменениями в каждом из них. Я читал о git
и использовать его в течение нескольких лет, так что я знаком со следующей общепринятой:Как одна копия фиксируется без создания разных SHA1?
- Не
merge
, если это не имеет смысла. Вместо этого используйтеrebase
. - Если вам просто нужно втянуть один фиксатор,
cherry-pick
- твой друг. - Всегда
pull --rebase
на пульте дистанционного управления перед тем, как нажимать. - Хранить функции в соответствии с
rebase
.
Что они не говорят вам, это общепринятая создает кучу фиксаций, которые почти идентичны, за мелкие детали, которые меняют свои SHA1s кроме. Почему это имеет значение? Это поражает цель сравнения ветвей с git log --left-right --graph --cherry-pick --oneline branch1..branch2
и git show-branch
, что особенно раздражает. Почувствуется как дешевого разветвления. Это почти невозможно увидеть, какие патчи отсутствуют в каждой ветке.
Итак, как вы поддерживаете несколько ветвей в соответствии с идентичными SHA1, чтобы эти инструменты могли использоваться? Являются ли заплатки лучшим способом сделать это?
Спасибо, это на самом деле способ, которым я должен был держать основные эквиваленты в строке все время. История чистая, сравнения работают так, как ожидалось, DAG выглядит красиво. Для тех, кто находит это в будущем, я просто хочу отметить, что для меня «мастер» был общим, а «master-foo» был конкретным. Поэтому после тестирования изменений в 'master', commit, а затем переключитесь на' master-foo' и rebase. Это означает, что 'master-foo' совершает верх. Также полезно нажать «git rebase -i @ {u} && git push origin HEAD', чтобы избежать перезаписи удаленной истории. – jrhorn424
На самом деле, я не уверен, что 'git rebase -i @ {u} && git push origin HEAD' - это путь. Что-то в моем рабочем процессе изменяет мои коммиты, и это может быть так. Во всяком случае, совет @ nevik прочен. – jrhorn424
, если вы хотите переустановить все коммиты в 'master-foo', вам не нужна интерактивная перебаза (вы можете использовать ее, чтобы проверить, какие коммиты будут переустановлены); и если будет выполняться перезагрузка на '@ {u}', 'git push' будет достаточно, потому что ваша ветка настроена для отслеживания своей ветви вверх по течению (** если ** ваш параметр' push.default' не говорит Git, чтобы нажать * all * отслеживание филиалов) –