Как я могу переупорядочивать/комбинировать фиксации с помощью перебазы Мерзавцев?

После довольно многих часов, играя с переосновой, repo все еще отличается от того, в чем я нуждаюсь:

Я хотел бы выполнить следующие задачи:
[некоторые из которых были в порядке, прежде чем я начал смешивать с переосновой :(]

  • Переместитесь главная фиксация ("Удаленный посторонний...") к перед ответвлением прочь (Прямо выше "фиксируют для № 226").
  • Объедините две фиксации, которые находятся в ответвлении 'скручивания' / основном' ответвлении. "запятая" и "Перемещенный загруженный..." должна быть той же фиксацией, и мне не нужно сообщение о фиксации "запятой" вообще.
  • Объедините недавно объединенное "Перемещение загруженная" фиксация в 'резервное' ответвление и избавьтесь от 'скручивания'.
  • Переместите 'ведущее устройство' туда, где это теперь говорит 'резервное копирование'.
  • Что означает тот "удаленный/источник/основной" тег?

enter image description here

Я понимаю, что это спрашивает много, но включайте фактические команды МЕРЗАВЦА.

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

6
задан Paŭlo Ebermann 29 August 2011 в 23:31
поделиться

3 ответа

Во-первых, заказать резервное копирование .

# Safety, should be a no-op if your gitk snapshot is accurate
git checkout backup

# Temporary branch
git branch backup-save backup

# Move top commit onto 'Fix for #226:
git rebase --onto origin/master HEAD^

# Go back to saved branch's parent (i.e. without the moved commit)
git reset --hard backup-save^

# Rebase onto the moved commit (HEAD@{1} is where HEAD was 1 step
# ago i.e. before the reset.)
git rebase HEAD@{1}

# Don't need the saved branch any more (although you might want
# to keep it for a bit just in case). This deletes it:
git branch -D backup-save

Объедините два коммита по поводу поворота, игнорируя верхние сообщения.

git checkout twist

git reset --soft HEAD^

# Just re-save the commit message, alternatively to skip the
# editor step do this: git commit --amend -C HEAD
git commit --amend

Объединение витки разветвляемой в резервную копию , снимите ветвь скругивания.

git checkout backup
git merge twist
git branch -d twist

Перемещение Master . Есть несколько модных способов, но это простым. Я предполагаю, что вы хотите Master , чтобы указать на редактированный позиции , а не там, где это было первоначально.

git checkout master
git reset --hard backup

Удаленное / Origins / Master - это ветка удаленного отслеживания и говорит вам, где указатель ветки для ветки в дистанционном репозитории происхождение , или, скорее, было когда Вы последним извлекли, толкнули или вытащили.

8
ответ дан 8 December 2019 в 17:21
поделиться

Как не бойтесь

Я хотел бы показать вам, что независимо от того, насколько плохо вы испортиете, комбинирует никогда не разрушаться *, и вы всегда можете вернуться туда, куда вы начали.

Я сделал дерево из искусственного гидромассажества, которое имеет одинаковую форму, что и вы иллюстрировали:

Теперь я собираюсь уничтожить последние три коммита из «резервной» ветки:

$ git log --oneline
9b41f46 Removed extraneous whitespace
981e2e8 Merged the "loadscripts" function
005bc62 Pick up a few very fringe cases
07e71d9 Merged "getDepsForScript" function
...
$ git reset --hard HEAD~3
HEAD is now at 07e71d9 Merged "getDepsForScript" function
$ git log --oneline
07e71d9 Merged "getDepsForScript" function
...

Ой, это было плохо. Давайте вернемся туда, куда мы начали. Сначала посмотрите, что мы сделали:

$git reflog
07e71d9 HEAD@{0}: HEAD~3: updating HEAD
9b41f46 HEAD@{1}: commit: Removed extraneous whitespace
...

Вы можете увидеть, что когда мы сбросимся, все GIT делали, чтобы заставить голову указать на этот старый коммит. Но никаких коммитов фактически не потерял - они просто стали сиротами, а не частью какой-либо ветки. Давайте снова сделаем их частью «резервной копии» снова:

$ git reset --hard 9b41f46
HEAD is now at 9b41f46 Removed extraneous whitespace
$ git log --oneline
9b41f46 Removed extraneous whitespace
981e2e8 Merged the "loadscripts" function
005bc62 Pick up a few very fringe cases
07e71d9 Merged "getDepsForScript" function
...

Git означает, что никогда не скажешь, что вы извините.

* Свободные объекты в конечном итоге получают сборщик мусора, но не до тех пор, пока им не по крайней мере, две недели.

Как делать то, что вы хотите.

Сначала давайте комбинируем два коммита в мастере:

$ git checkout master
$ git rebase -i HEAD~2

Git запустит ваш редактор. Измените это:

pick 6389f4e Moved "loaded" function out of "require".
pick 41fb646 comma

к этому:

pick 6389f4e Moved "loaded" function out of "require".
s 41fb646 comma

и сохранить. Git снова запустит ваш редактор. Измените это:

# This is a combination of two commits.
# The first commit's message is:

Moved "loaded" function out of "require".

# This is the 2nd commit message:

comma

к этому:

Moved "loaded" function out of "require".

и сохранить.

Теперь давайте переполнив заземление коммитов в «Backup»:

$ git checkout backup
$ git rebase -i remotes/origin/master

, когда ваш редактор появляется, измените это:

pick ec7f71c moved "loaded" function out of "require"
pick 4a76897 Replaced maploaded event
pick 07e71d9 Merged "getDepsForScript" function
pick 005bc62 Pick up a few very fringe cases
pick 981e2e8 Merged the "loadscripts" function
pick 9b41f46 Removed extraneous whitespace             <-----

к этому:

pick 9b41f46 Removed extraneous whitespace             <-----
pick ec7f71c moved "loaded" function out of "require"
pick 4a76897 Replaced maploaded event
pick 07e71d9 Merged "getDepsForScript" function
pick 005bc62 Pick up a few very fringe cases
pick 981e2e8 Merged the "loadscripts" function

и сохранить.

Теперь Cherry-Pick объединенная «перемещенная заряжена» комбинирующая мастера и на текущую ветку («резервное копирование»)

$git cherry-pick master

сделать главную точку на тот же коммит как «резервное копирование»

$git checkout master
$git reset --hard backup

избавиться от ветви

$git branch -D twist
6
ответ дан 8 December 2019 в 17:21
поделиться

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

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

  • Для объединения двух коммитов вы можете сделать интерактивный rebase.

  • Для выбора одного коммита из одной ветки и применения его к другой, в то время как в целевой ветке используйте git-cherry-pick. Вы можете удалить старую ветку, используя git-ветку -D twist, когда это будет сделано.

Надеюсь, эти советы помогут вам добраться до цели.

0
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: