Git исключить фиксацию в ветки

У меня есть фиксация, я сохранил в ветке, потому что это должно идти только к определенному блоку.

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

Теперь, по ошибке, я объединил master для dev и ввел эту фиксацию в dev.

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

Если это так, как мне отменить эту фиксацию только от ветки dev.

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

Если reset назад и применить, это единственный вариант, то как мне только объединить эти дополнительные коммиты с мастером, кроме ненужной фиксации.

Update:

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

Спасибо заранее!

Ответ 1

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

Есть, вероятно, больше способов добиться этого.

Ответ 2

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

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

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

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