Git исключает коммит в ветке - PullRequest
13 голосов
/ 26 марта 2010

У меня есть коммит, я хранил его в ветке, потому что он должен идти только в конкретный ящик.

Я слил его с мастером ветки, но не с dev-веткой, которую я использую локально.

Теперь по ошибке я слил master с dev, и это ввело этот коммит в dev.

Я знаю, может ли git вернуть sha на ветку dev; но так как это приведет к введению коммита, который отменяет этот коммит (я полагаю, я точно не пробовал это), когда я объединяю master, этот коммит тоже будет отменен?

Если это так, как мне отменить этот коммит только из ветки dev.

И, о, git reset HEAD^1 --hard не является опцией, потому что есть другие коммиты на master после ненужного коммита.

Если сбросить снова и применить - единственная опция, то как мне объединить только те дополнительные коммиты от мастера, кроме ненужного коммита.

Обновление:

Вот дерево коммитов. Выглядит сложным. Я указал на коммит, который мне не нужен в разработке. (Я также удалил любую личную информацию, спасибо за понимание. Намного проще сделать снимок экрана gitk, чем ascii art.) alt text

Заранее спасибо!

Ответы [ 2 ]

17 голосов
/ 26 марта 2010

На чистой копии вашей ветки, git rebase --interactive и отбросьте нежелательный коммит. В качестве альтернативы, вы можете создать новую ветку перед нежелательным коммитом и git cherry-pick желаемые коммиты на него.

Возможно, есть и другие способы достичь этого.

2 голосов
/ 20 декабря 2010

git reflog, затем git reset - ваши друзья исправляют ошибки.

Чтобы избежать единого коммита при слиянии ветки, вот что я только что использовал в своем проекте:

  • Предположим: слияние из ветви B в голову.
  • Определить повторный коммит, которого следует избегать (R0)
  • Определение повторного коммита непосредственно перед R0 (R1)

    git merge <R1>
    git merge -s ours R0
    git merge B
    
...