Git интерактивная перебаза не фиксируется

Я нахожусь на хозяине, и я сделал rebase -i <my_branch>

Получает следующее:

noop

# Rebase c947bec..7e259d3 onto c947bec
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit log message
#  x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Я хотел бы выбрать некоторые коммиты не все, так как некоторые из них не приветствуются. Также как вы работаете, когда хотите сохранить некоторые файлы или изменения, всегда "локальные" в какой-либо ветке? Есть ли какой-нибудь помощник, например .gitignore?

Ответ 1

Как и неинтерактивная переадресация, вам необходимо переустановить конкретную фиксацию.

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

Я не знаю подробностей вашей ситуации, но вы можете захотеть что-то вроде этого:

# Opportunity to edit or prune commits between origin/master and current branch
git rebase -i origin/master

или

# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !

Ответ 2

rebase -i без диапазона фиксации не будет отображаться никаких коммитов. для восстановления последнего, скажем, 7 коммитов используют следующее:

git rebase -i HEAD~7

будьте осторожны, что это перепишет историю. не делайте этого, если коммиты уже нажаты


для вашего второго вопроса: у вас есть ветка с вашими изменениями (в основном ветвь конфигурации) и регулярно объединяйте в нее другие ветки. таким образом, изменения не будут перемещаться в другие ветки

Ответ 3

Когда вы используете git rebase -i, вы, как правило, должны указывать, с какой фиксации вы хотите выполнить rebase. Итак, если, например, вы хотите удалить некоторые из коммитов из последних 10 в текущую ветку, вы должны сделать:

git rebase -i HEAD~10

Ответ 4

Как уже упоминалось, вам нужно указать диапазон фиксации.

git rebase -i <latest-commit-to-be-retained>

(Предположим, что вы находитесь в той же ветки, что и фиксация, которую нужно отредактировать) -

Чтобы указать коммиты, вы можете использовать стенограммы HEAD ~ 5 или использовать контрольную сумму sha (которую вы можете получить с помощью git log)

Фактически любая фиксация будет выполняться, если она является предшественником/предком для коммитов, которые вы хотите удалить/изменить/переделать в дереве. В этом списке будут перечислены все коммиты с <latest-commit-to-be-retained> в редакторе (определенные в конфигурации git). Из списка, чтобы удалить фиксацию, просто удалите эту конкретную строку, сохраните и завершите (vi habbits:)) файл + редактор и сделайте git rebase --continue

Во втором ответе я согласен с knittl

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