У меня есть ветка 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'
Ответы:
Вы хотите
git rebase -i
выполнить интерактивную перебазировку .Если вы в настоящее время находитесь на своей «фиксации 1», а фиксация, которую вы хотите объединить, «фиксация 2» - это предыдущая фиксация, вы можете запустить ее
git rebase -i HEAD~2
, в результате чего появится редактор, в котором будут перечислены все фиксации, по которым выполняется перебазирование. Вы должны увидеть две строки, начинающиеся с «выбрать». Чтобы продолжить раздавливание, измените первое слово второй строки с «выбрать» на «сквош». Затем сохраните файл и выйдите. Git превратит вашу первую фиксацию в вашу вторую последнюю.Обратите внимание, что этот процесс перезаписывает историю вашей ветки. Если вы куда-то проталкиваете свой код, вам придется,
git push -f
и всем, кто делится вашим кодом, придется перепрыгнуть через некоторые препятствия, чтобы вывести ваши изменения.Обратите внимание, что если два рассматриваемых коммита не являются последними двумя коммитами в ветке, процесс будет немного другим.
источник
Then write your file, and quit
? Я использую терминал Android Studio, саму консоль git или даже открываю консоль git с помощью программного обеспечения SourceTree. Но как сохранить и выйти?Ленивая простая версия для таких забывчивых, как я:
git rebase -i HEAD~3
или сколько коммитов вместо 3.Поверните это
в это
и выполните какое-то действие, в которое вы нажмете,
esc
затем,enter
чтобы сохранить изменения. [1]Когда появится следующий экран, избавьтесь от этих # строк мусора [2] и создайте новое сообщение фиксации или что-то в этом роде и выполните то же
escape
enter
действие. [1]Ого, у вас меньше коммитов. Или вы просто все сломали.
[1] - или что угодно, что работает с вашей конфигурацией git. Это просто последовательность, которая эффективна с учетом моих настроек.
[2] - вы увидите кое-что вроде того,
# this is your n'th commit
что несколько раз, с вашими исходными коммитами прямо под этим сообщением. Вы хотите удалить эти строки и создать сообщение фиксации, чтобы отразить намерения n коммитов, которые вы объединяете в 1.источник
s
здесь используется для обозначения сквоша. Чтобы использовать фиксацию, но слиться с предыдущей фиксацией2
коммит и хотите объединить один и тот же2
коммит, вам нужно будет запуститьgit reset --soft HEAD~
иgit commit --amend
.git rebase -i HEAD~<quantity of your commits>
(т.е.git rebase -i HEAD~5
)txt
файле изменитеpick
ключевое слово наsquash
для всех коммитов, кроме первого коммита (который находится вверху). Дляreword
начала измените его на (что означает, что вы предоставите новый комментарий для этого коммита на следующем шаге) и нажмите СОХРАНИТЬ! Если в vim, нажмите,esc
затем сохраните вводwq!
и нажмите Enter.Выполнено
источник