Создание Git Flow и функции перебазирования
У меня 2 филиала, разработка и мастер. Я хочу создать новую функцию в ветке разработки, поэтому я делаю:
git flow feature start test_01
Который создает ветку функций и переключается на эту ветку. По причинам тестирования я переключаюсь на ветку разработки и редактирую файл read_me.markdown. Я фиксирую это изменение и подталкиваю его.
Я переключаюсь назад на ветку объектов и редактирую тот же файл read_me.markdown в той же строке, чтобы вызвать конфликт слияния. Чтобы закончить функцию, которую я делаю:
git flow feature finish test_01 -r (so it rebases the feature branch)
Теперь возникает конфликт, я исправляю его, используя vimdiff с vim-fugitive. Я запускаю vimdiff и делаю ": ls", выбираю удаленную ветвь для использования. Затем я делаю ":diffget 4", а затем ":diffupdate", а затем я просто пишу файл и выхожу все ": wqa"
Теперь конфликт исправлен и произошло слияние, и я просто проталкиваю свои изменения.
ПРОБЛЕМА: когда я делаю это, я смотрю на Github для Mac и вижу, что нет никаких конфликтов и никаких изменений. Но когда я переключаюсь (извлекаю) в основную ветвь и снова в развивающуюся ветвь, я снова получаю тот же конфликт слияния?
Поэтому мне интересно, что не так в моем способе работы.
Большое спасибо за помощь
ОБНОВЛЕНИЕ1) Конфликт инструмента Github:
Auto-merging README.markdown
CONFLICT (content): Merge conflict in README.markdown
(1)
ОБНОВЛЕНИЕ2) Пробовал без rebase та же ошибка, без ошибки при проверке ветки только в Github Tool
Update3)
1) тест запуска функции git flow
2) сделать изменения, чтобы развиваться -> чтобы я мог зажечь конфликт
3) внести изменения в функцию
4) разработка git rebase
5) Исправить изменения -> Когда я хочу зафиксировать, он говорит: "Без изменений - вы забыли использовать" git add "?"
6) разработка git checkout
7) функция git merge -> ВСЕГДА ИМЕЕТ Конфликт слияния на ветке Develop
ОБНОВЛЕНИЕ4) Подробнее
1) Я на новой ветке разрабатываю
2) git flow init
3) улучшение запуска git flow1 -> ветвь объекта создана
4) разработка git checkout
4.1) В файле readme.md я добавляю "testtesttest" и фиксирую свою работу
4.2) статус тиг
4.2) Я установил файл readme.md на "изменения, которые должны быть зафиксированы"
4.3) Я фиксирую эти файлы
4.4) Зафиксировано как "обязательство по развитию отрасли"
5) Git Checkout особенность / улучшение1
5.1) в файле readme.md я добавляю "xxxxxxxxx" и фиксирую свою работу
5.2) статус тигра
5.2) Я установил файл readme.md на "изменения, которые должны быть зафиксированы"
5.3) Я фиксирую эти файлы
5.4) Передано как "зафиксировать в ветви функций"
6) Разработка / улучшение git rebase1
First, rewinding head to replay your work on top of it...
Applying: Commit on Develop Branch
Using index info to reconstruct a base tree...
M README.md
Falling back to patching base and 3-way merge...
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Failed to merge in the changes.
Patch failed at 0001 Commit on Develop Branch
The copy of the patch that failed is found in:
/Users/Vincent/Documents/featureconflicts/.git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
7) У меня сейчас конфликт, я исправлю его, установив файл в состояние 5.1 (в файле readme.md я добавляю "xxxxxxxxx")
8) Исправлен конфликт
9) сделал git rebase --skip
10) Переключается на мою ветку разработки
11) улучшение финишной функции git flow
-> Теперь все отлично работает. Так что это было перебазирование - skip, что было необходимо.
2 ответа
Таким образом, ключ к этой истории был, если возникает конфликт:
-> и необходимо сохранить изменения обеих веток - git rebase --continue -> если нужно сохранить изменение только функции - git rebase --skip
Вы работаете в среде с сотнями людей, работающих над одним проектом? Я не чувствовал, как вы, поэтому слепое использование модели git flow для ветвления - это огромное излишество. Вам не нужно переходить с ветки на ветку только ради использования веток. Используйте ветки, когда они вам нужны. Итак, сначала я бы порекомендовал сбросить инструмент потока и использовать просто git. В одиночном проекте вы можете легко разрабатывать непосредственно в ветке разработки и расширять возможности только в том случае, если вам нужно сделать что-то параллельно.
В случае, если вы используете ветвь функции, вот последовательность, которая должна сделать трюк:
git checkout -b myfeature develop # creating branch from develop and checking out
commit, commit, commit...
git rebase myfeature develop # resolve conflicts if any
git checkout develop
git merge myfeature # fast-forward
git checkout master
git merge develop # fast-forward
git push # or git push <remote_name> master
Это кажется более понятным и менее многословным.
Из последних обновлений OP видно, что изначально он не заканчивал операцию перебазирования должным образом в случае конфликтов. В случае конфликтов во время ребазинга вы должны сделать:
`git status` #will provide the the list of conflicting files marking them as
both modified, so edit them to remove conflicts
`git add {files}` # to tell git that the conflicts are resolved and you can
continue with rebase
`git rebase --continue` # continue rebase operation, by applying next
patch in line.
в зависимости от способа разрешения конфликтов следующий патч может вызвать другой набор конфликтов, если был затронут тот же фрагмент кода.