Git Interactive ReBase не фиксирует, чтобы выбрать - PullRequest
89 голосов
/ 26 июня 2011

Я учусь на мастера, и я сделал 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's 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?

Ответы [ 4 ]

72 голосов
/ 26 июня 2011

Как неинтерактивная перебазировка, вы должны перебазировать на конкретный коммит.

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

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

# 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("-"_) !
24 голосов
/ 26 июня 2011

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

git rebase -i HEAD~7

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


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

8 голосов
/ 26 июня 2011

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

git rebase -i HEAD~10
4 голосов
/ 08 февраля 2012

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

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

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

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

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

Что касается второго ответа, я согласен с knittl

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

...