Как я могу объединить два коммита в один коммит?

У меня есть ветвь 'firstproject' с 2 коммитами. Я хочу избавиться от этих коммитов и сделать их видимыми как одно коммит.

Команда git merge --squash звучит многообещающе, но когда я запускаю git merge --squash мой терминал просто выводит параметры для команды. Какая правильная команда?

Commit 1:
Added 'homepage.html'
Added 'contacts.html'

Commit 2:
Added 'homepage.php'
Added 'homepage.php'
Deleted 'homepage.html'
Deleted 'contacts.html'

Ответ 1

Вы хотите git rebase -i выполнить интерактивную перезагрузку.

Если вы в настоящий момент используете "commit 1" и commit, который хотите объединить, "commit 2" - это предыдущая фиксация, вы можете запустить git rebase -i HEAD~2 и изменить первое слово второй строки от "выбрать" до "squash". Затем напишите свой файл и закройте. Git запустит вашу первую фиксацию в вашу вторую последнюю фиксацию.

Обратите внимание, что этот процесс перезаписывает историю вашего ветки. Если вы что-то git push -f свой код, вам нужно будет git push -f и любой, кто поделится вашим кодом, должен будет перепрыгнуть через некоторые обручи, чтобы вытащить ваши изменения.

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

Ответ 2

Ленивый простой вариант для забывчиков, как я:

git rebase -i HEAD~3 или как бы много коммитов вместо 3.

Поверните это

pick YourCommitMessageWhatever
pick YouGetThePoint
pick IdkManItsACommitMessage

в этот

pick YourCommitMessageWhatever
s YouGetThePoint
s IdkManItsACommitMessage

и выполните некоторые действия, когда вы нажмете esc затем enter чтобы сохранить изменения. [1]

Когда появится следующий экран, избавьтесь от этих строк # мусора [2] и создайте новое сообщение коммита или что-то еще, и выполните одно и то же действие escape enter. [1]

Уоу, у тебя меньше коммитов. Или ты просто сломал все.


[1] - или все, что работает с вашей конфигурацией git. Это всего лишь последовательность, эффективная с учетом моей настройки.

[2] - вы увидите некоторые вещи, такие как # this is your n'th commit несколько раз, и ваши оригинальные коммиты прямо под этим сообщением. Вы хотите удалить эти строки и создать сообщение коммита, чтобы отразить намерения n коммитов, которые вы объединяете в 1.

Ответ 3

  1. Оформить свою ветку и подсчитать количество всех ваших обязательств.
  2. Откройте git bash и напишите: git rebase -i HEAD~<quantity of your commits> (т. git rebase -i HEAD~5)
  3. В открывшемся изменении файла txt pick ключевое слово для squash для всех коммитов, кроме первого commit (который находится сверху). Для первого изменить его на reword (что означает, что вы предоставите новый комментарий для этой фиксации на следующем шаге) и нажмите "СОХРАНИТЬ"! Если в vim, нажмите esc затем сохраните, введя wq! и нажмите enter.
  4. Предоставьте комментарий.
  5. Откройте Git и сделайте "Fetch all", чтобы увидеть новые изменения.

Готово