Я создал ветку с неправильной веткой в ​​git и уже слил старую ветку в master, как мне удалить коммиты из другой ветки? - PullRequest
1 голос
/ 08 декабря 2011

Когда я создал ветку, я случайно создал ее из экспериментальной ветки, и я не хочу, чтобы какие-либо из этих изменений были внесены в наш репозиторий SVN.Ветка, которую я создал, уже была объединена в master, а старая ветвь удалена.Я только что понял, что я собирался сделать до запуска git svn dcommit.

Как я могу зафиксировать один коммит из исходной ветви?Я выделил это в git log.

1 Ответ

0 голосов
/ 08 декабря 2011

Если у вас такая ситуация:

x--x--x--x--x1--------m--y--y (master)
    \                /
     \              /
      -o--o--o--z--z (deleted)

Вы могли бы:

  • создать ветку tmp, тег m и сбросить на x1
  • используйте git reflog, чтобы получить ГОЛОВУ удаленной ветви 'br' и создать на ней ветку 'br', а также тег o1 (последние 'старые' коммиты перед вашими экспериментальными коммитами)
              [tagM]
                -m--y--y (tmp)
               /
              /
x--x--x--x--x1  (master)
    \                
     \              
      -o--o--o1--z--z (br)
            [tagO]
  • git checkout br && git rebase --onto master o1
              [tagM]
                   -m--y--y (tmp)
                  /
                 /
x--x--x--x------x1  (master)
    \            \            
     \            \    
      -o--o--o1    z--z (br)
            [tagO]
  • объединяет только те коммиты, которые вы хотите освоить: git checkout master && git merge br
                [tagM]
                   -m--y--y (tmp)
                  /
                 /
x--x--x--x------x1--------m2  (master)
    \            \       /      
     \            \     /
      -o--o--o1    z'--z' (br)
            [tagO]
  • перебазировать остальные коммиты, сделанные после первоначального слияния поверх master.
                [tagM]
                   -m
                  /
                 /
x--x--x--x------x1--------m2--y'--y'  (master,tmp)
    \            \       /      
     \            \     /
      -o--o--o1    z'--z' (br)
            [tagO]
  • git checkout tmp && git rebase --onto master tagM && git merge master
    (ускоренное слияние)
...