Объединение Нескольких Коммитов В Один Перед Нажатием


этот вопрос относится не только к тому, как выполнить эту задачу, но является ли это хорошей или плохой практикой с Git.

считайте, что локально я делаю большую часть работы над главной веткой, но я создал актуальную ветку, которую я буду называть "topical_xFeature". В процессе работы над " topical_xFeature "и переключения туда и обратно, чтобы выполнить другую работу над главной ветвью, оказывается, что я сделал более одного коммита на ветке" topical_xFeature", но между каждым совершите, я не сделал никакого толчка.

первый, вы считаете это плохой практикой? Не будет ли разумнее придерживаться одного коммита на ветку за толчок? В каких случаях было бы хорошо иметь несколько коммитов на ветке до того, как будет сделан толчок?

второй, как мне лучше всего выполнить приведение нескольких коммитов на ветке topical_xFeature в главную ветвь для толчка? Это неприятность, чтобы не беспокоиться об этом и просто сделать пуш, где несколько коммитов подталкиваются, или это менее раздражает, чтобы каким-то образом объединить коммиты в один, а затем нажать? Опять же, как это сделать?

4 97

4 ответа:

для вашего первого вопроса, нет, нет ничего плохого в том, чтобы нажать несколько коммитов сразу. Много раз вы можете разбить свою работу на несколько небольших логических коммитов, но только поднимите их, как только почувствуете, что вся серия готова. Или вы можете сделать несколько коммитов локально при отключении, и вы нажимаете их все, как только вы снова подключены. Нет причин ограничивать себя одним коммитом за толчок.

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

если вы хотите раздавить несколько коммитов вместе, вы можете использовать git rebase -i. Если вы находитесь на ветке topical_xFeature, ты бы побежал git rebase -i master. Это откроет окно редактора, с кучей коммитов, перечисленных с префиксом pick. Вы можете изменить все, кроме первого squash, который скажет Git сохранить все эти изменения, но раздавить их в первом коммите. После того как вы сделали это, проверьте master и слияние в вашей ветви функции:

git checkout topical_xFeature
git rebase -i master
git checkout master
git merge topical_xFeature

альтернативно, если вы просто хотите раздавить все в topical_xFeature на master, вы могли бы просто сделайте следующее:

git checkout master
git merge --squash topical_xFeature
git commit

что вы выберете зависит от вас. Как правило, я бы не беспокоился о том, чтобы иметь несколько меньших коммитов, но иногда вы не хотите беспокоиться о дополнительных незначительных коммитах, поэтому вы просто раздавите их в один.

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

чтобы достичь этого, я предлагаю вам использовать 'сквош' концепция, предоставленная GIT.

выполните следующие действия.

1) git rebase-i

откройте интерактивный редактор rebase, где он покажет все ваши коммиты. В основном, где вам нужно определить коммиты, которые вы хотите объединить в один совершать.

представьте, что это ваши коммиты и показано что-то вроде этого в Редакторе.

pick f7f3f6d changed my name a bit    
pick 310154e updated README formatting and added blame   
pick a5f4a0d added cat-file  

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

2) изменить "выбор" на "сквош" для последних зафиксированных изменений. что-то вроде показано ниже. Таким образом, ваши последние 2 коммита будут объединены с первым один.

pick f7f3f6d changed my name a bit         
squash 310154e updated README formatting and added blame   
squash a5f4a0d added cat-file

для редактирования используйте 'i', это позволит редактор для вставки.

3) Теперь, сохранить редактор С помощью следующей команды. : wq

когда вы сохраняете это, у вас есть один коммит, который вводит изменения всех трех предыдущих коммитов.

надеюсь, что это поможет вам..

первый: ничто не говорит вам, что у вас есть только одна фиксация на ветку за push: push-это механизм публикации, позволяющий публиковать локальную историю (т. е. коллекцию коммитов) на удаленном РЕПО.

второй: a git merge --no-ff topical_xFeature записывал бы на мастер как единая фиксация вашей темы работы, прежде чем нажимать master.
(Таким образом, вы держите topical_xFeature вокруг для дальнейших эволюций, что вы можете записать на master как одна новая фиксация при следующем слиянии --нет-ФФ.
Если избавиться от topical_xFeature есть цель, то git merge --squash это правильный вариант, как описано в Брайан Кэмпбелл ' s ответ.)

переключитесь на главную ветку и убедитесь, что вы в курсе.

git checkout master

git fetch это может быть необходимо (в зависимости от вашей конфигурации git) для получения обновлений на origin/master

git pull

слить ветку в ветку master.

git merge feature_branch

сброс главной ветви в исходное состояние.

git reset origin/master

git сейчас учитывает все изменения в неиндексированных изменений. Мы можем добавить эти изменения в один коммит. Добавление. также добавить игнорируемых файлы.

git add --all

git commit

Ref: https://makandracards.com/makandra/527-squash-several-git-commits-into-a-single-commit