Создание 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.

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

Другие вопросы по тегам