Squash / rebase последний коммит без потери изменений для git? - PullRequest
0 голосов
/ 23 октября 2018

Я борюсь с этим git rebase / squash.

В настоящее время у меня есть 4 коммита кода, эти 4 коммита имеют несколько изменений.

Я хочу сделать все эти 4 коммитав 1, не имеет значения, теряю я сообщения о коммите или нет.

Итак, я попробовал это:

Сквош мои последние X коммитов вместе, используя Git

git rebase -i HEAD~4.

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

Верните все в исходное состояние, а затем я попытался

git reset --hard HEAD~5
git merge --squash HEAD@{1}

git reset сработал и отправил меня на коммит, но тогда --squash просто не смог выполнить

git merge с --no-ff и --squash

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

Есть ли способ, которым я мог бы заставить его работать?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018
git reset --hard HEAD~5
git merge --squash HEAD@{1}

После этого вам нужно запустить git commit

0 голосов
/ 23 октября 2018

Когда я хочу сделать много коммитов в одном, я делаю git reset --soft и затем фиксирую.

Предположим, что это последние 4 коммита, которые я хочу сжать в одну ревизию:

git reset --soft HEAD~4
git commit -m "Turning 4 revisions into a single one"

Готово!

0 голосов
/ 23 октября 2018

Когда вы запустите git rebase -i HEAD~4, git откроет текстовый редактор с файлом, который выглядит примерно так:

pick fc7d27a Change 1
pick 09dd4e6 Change 2
pick 683af92 Change 3
pick a72e15a Change 4

# Rebase 3d8944f..a72e15a onto 3d8944f (4 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
#   However, if you remove everything, the rebase will be aborted.
#
#   
# Note that empty commits are commented out

Это «открыть файл в текстовом редакторе» - это интерфейс, который позволяетвам нужно сказать git, что вы хотите сделать, затем выполнить перебазирование.

Измените pick на squash (или просто s) для коммитов, которые вы хотите вставить в предыдущий коммит.Например: затем сохраните и выйдите из редактора.

pick fc7d27a Change 1
squash 09dd4e6 Change 2
squash 683af92 Change 3
squash a72e15a Change 4

Изменения 2, 3 и 4 будут объединены в изменение 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...