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
имеют ветку с вашими изменениями (в основном ветвь конфигурации) и регулярно сливайте в нее другие ветки. таким образом, изменения будут не переходить в другие ветки