2015-10-07 2 views
2

У меня есть 2 ветки: FeatureBranch и ReleaseBranch.Как вишня-выбрать конкретные фиксации файла?

Я сделал cherry-pick файл фиксации c1 от FeatureBranch до ReleaseBranch. Позже я сделал некоторые изменения в том же файле на FeatureBranch & с идентификатором c2.

Снова я сделал тот же файл на FeatureBranch и совершил ошибку с идентификатором c3.

Теперь я не хочу c2 на ReleaseBranch, мне нужен только c3. Я пытался вишневым забрать прямо с c3 идентификатором, но Git возвратил ошибку:

could not apply c3...

Я знаю Индекс в Git является инкрементным, так как я не хочу, c2 изменения, и мне нужно только c3. Есть ли способ достичь этого?

+0

Какое полное сообщение об ошибке '' не может применяться c3 ... "'? Ошибка – LeGEC

+0

: не удалось применить c3 ... в ReleaseBranch: после устранения конфликтов отметьте исправленные пути. Подсказка: с git add git rm. hint: и зафиксировать результат с помощью git commit. –

ответ

1

Что происходит с возвращением c2 в ветку Feature (или сделать отдельную ветку из ветви Feature и вернуться туда), сделав c4 и cherry pick that. Я предполагаю, что ветвь Release может быть сброшена до состояния до c1.

git checkout -b RevertFeatureC2 FeatureBranch 
git revert C2 

ОПЦИЯ1 - с чистой MasterBranch - не C1 C2 (но, возможно, он будет работать, даже если есть C1 C2 уже)

git checkout MasterBranch 
# then cherry pick or merge from RevertFeatureC2 

OPTION2 - если его хорошо, чтобы переписать весь файл - без каких-либо отдельных изменений только в MasterBranch (пожалуйста, проверьте):

git checkout ResetFeatureC2 the_file.xyz 
+0

Спасибо за ваши впечатления отопольский. –

2

Первый: вы поддерживаете две различные версии кода, один на FeatureBranch, один на ReleaseBranch. Вы начинаете видеть негативные последствия наличия двух «живых» версий кода.
Я не знаю, каковы ваши ограничения, но «интеграция функции в Release или функция« Отброс »должна стать приоритетной вехой в ваших ближайших планах.


Вы сталкиваетесь с конфликтом в этом файле. git не может применять c3 в простой форме, потому что c2 ввел некоторые изменения, которые превращают патч c2 -> c3 во что-то, что нельзя применить на Release.

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

Если изменения в c2 просты в обращении, другой способ состоит в том, чтобы отбросить текущий вишневый выбор, получить полный контент файла и отредактировать его, чтобы удалить изменения, которые вы не хотите совершать в Release:

# -- from ReleaseBranch 

# cancel the cherry-picking : 
git cherry-pick --abort 

# get the content of the file stored in c3 (will contain modifs from c1+c2+c3) : 
git checkout c3 -- path/to/file 

# edit the file to remove unwanted code ... 

# add and commit 
git add path/to/file 
git commit 
+0

Спасибо за ваши данные LeGEC –

Смежные вопросы