После довольно многих часов, играя с переосновой, repo все еще отличается от того, в чем я нуждаюсь:
Я хотел бы выполнить следующие задачи:
[некоторые из которых были в порядке, прежде чем я начал смешивать с переосновой :(]
Я понимаю, что это спрашивает много, но включайте фактические команды МЕРЗАВЦА.
Я не возражаю читать и пробовать самостоятельно, но немного перепутан результатами, не соответствующими, что я ожидал бы, и я действительно не хочу случайно уничтожать любые фиксации.
Во-первых, заказать резервное копирование
.
# 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
- это ветка удаленного отслеживания и говорит вам, где указатель ветки для ветки
в дистанционном репозитории происхождение
, или, скорее, было когда Вы последним извлекли, толкнули или вытащили.
Как не бойтесь
Я хотел бы показать вам, что независимо от того, насколько плохо вы испортиете, комбинирует никогда не разрушаться *, и вы всегда можете вернуться туда, куда вы начали.
Я сделал дерево из искусственного гидромассажества, которое имеет одинаковую форму, что и вы иллюстрировали:
Теперь я собираюсь уничтожить последние три коммита из «резервной» ветки:
$ 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
Здесь есть ряд вещей, которые вы пытаетесь достичь, и это немного неясно из схем, на которых указано, что именно необходимо, но могут помочь следующие указатели:
Вместо того, чтобы пытаться переместить вашу ветку, я бы сначала объединил коммиты, которые вы сделали в этой ветке, а затем применил бы финальный коммит к основной ветке, так как в конечном итоге это то, к чему вы стремитесь. В этот момент вам, возможно, придётся разрешить некоторые конфликты, но вам всё равно придётся это сделать. См. следующие два совета для получения информации о том, как этого добиться.
Для объединения двух коммитов вы можете сделать интерактивный rebase.
Для выбора одного коммита из одной ветки и применения его к другой, в то время как в целевой ветке используйте git-cherry-pick
. Вы можете удалить старую ветку, используя git-ветку -D twist
, когда это будет сделано.
Надеюсь, эти советы помогут вам добраться до цели.