2015-08-17 3 views
1

Это моя ситуация. В ветке X, первоначально созданной мастером (M), я сделал некоторые коммиты. Затем я открыл запрос на тяну, и один коллега объединился, чтобы справиться.Возвращение возврата с старой ветвью впереди мастера

Затем этот коллега заметил некоторые проблемы и создал ветку RB, на которой он сделал реверс слияния для освоения.

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

X--X--X--X 
     \ 
M-------M-----M 
     \ /
     RB--RB 

Как это решить?

+0

Ваша диаграмма (и описание) указывает, что ветвь 'RB', которая содержит обратный _was_, снова объединяется в' master'. Это так? –

ответ

1

Вы можете использовать интерактивную переустановку, чтобы выборочно удалить фиксацию слияния в master, которая вернула все ваши изменения.

git checkout master 
git rebase -i HEAD~4 

Это предложит вам список фиксаций ищет что-то вроде этого:

pick jd832ng some commit 
pick bd381nv merge commit branch RB into master 
pick al83mld an earlier commit here 
pick f2ui2nd another earlier commit 

Удалить строку, содержащую слияние совершала, оставляя вам следующее:

pick jd832ng some commit 
pick al83mld an earlier commit here 
pick f2ui2nd another earlier commit 

сейчас сохраните этот файл и заполните rebase. Вы удалили фиксацию слияния из ветки master.

Примечание:

Если слияние совершить из ветви RB является последним совершить в master, то вы можете нюк его с помощью следующих действий:

git checkout master 
git reset --hard HEAD~1 

Это удалит голову ветви master. Если это происходит с фиксацией слияния, то вам повезло, и вы можете избежать интерактивной перезагрузки. Если, с другой стороны, другие люди совершают коммиты на вершине слияния, то вы в значительной степени остаетесь с интерактивной перестановкой в ​​качестве опции.

+1

Но я хочу вернуть обратно изменения. Мой коллега ошибся. –

+0

@mat_boy Вы можете использовать 'git reset' или' git rebase' в интерактивном режиме, чтобы очистить беспорядок, q.v. мой ответ выше. –

+0

Я подозреваю, что вы, возможно, испортили rebase. –