ГИТ интерактивные перебазирования не обязуется выбрать


Я на Мастер и я сделал 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 71

4 ответа:

Как неинтерактивная перебазировка, вы должны перебазироваться на определенную фиксацию.

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

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

# 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("-"_) !

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

git rebase -i HEAD~7

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


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

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

git rebase -i HEAD~10

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

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

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