Git: как слить или перебазировать после перебазировки? - PullRequest
1 голос
/ 01 мая 2019

Я сделал ошибку, сделав ребаз, чтобы объединить мою ветку с последней версией ветки, на которой она была основана.Я говорю «ошибка», потому что я не понимал, что позже это будет труднее (например, git pull вызывает серьезные конфликты там, где их не должно быть, а git push требует силы).

Это то, что я делал до сих пор:

$ git checkout major_branch
$ git pull
$ git checkout my_branch
make some changes and commits.
$ git rebase major_branch
make some changes and commits.
$ git push --force 

Теперь мне нужно получить последние изменения из major_branch (снова).Никто, кроме меня, не работал над my_branch.

Как бы я сделал это без катастрофы?

Т.е. могу ли я сделать ребаз более одного раза?

Могу ли я вернуться к слиянию и отказаться?перебазирования?

Это правильный путь?:

$ git checkout major_branch 
$ git pull               // does this only pull major_branch, or all branches from origin?
$ git checkout my_branch // my_branch exists locally and on origin. what if they are different?
$ git merge major_branch // is this the correct "way round"?
$ git push --force . // push my_branch back to server in case my local machine dies.

Если major_banch, который является моим "родителем", устареет, и теперь все используют "major_branch2", каковы мои варианты?Могу ли я просто сделать «git rebase major_banch2»?

В какой-то момент мне нужно вернуть свои изменения в major_branch.Как мне это сделать?Могу ли я сделать что-то вроде:

$ git checkout major_branch
$ git pull               // does this only pull major_branch?
$ git merge my_branch // is this the correct "way round"?
fix merge conflicts
$ git commit
$ git push // do I need to force?

В качестве другого варианта, есть ли способ выйти из моей текущей ситуации с перебазированием?Т.е. попасть в ситуацию, в которой у меня есть моя личная ветвь функций со всеми моими изменениями, а также со всеми изменениями из major_banch, но не с перебазированием, так что я могу просто использовать слияние, вытягивание и повторное нажатие (т. Е. «Нормальный» рабочий процесс)?

1 Ответ

1 голос
/ 01 мая 2019

Вы можете сделать ребаз столько раз, сколько хотите. Когда вы git pull, затрагивается только текущая ветвь. Таким образом, git checkout major_branch, за которым следует git pull, получит, а затем объединит major_branch с пульта. Затем вы можете оформить заказ my_branch и сделать git rebase major_branch. Это в значительной степени стандартный способ работы с частными ветвями WIP, над которым больше никто не работает. При этом вам всегда нужно будет принудительно нажимать my_branch.

Слияние major_branch с my_branch не требуется, если вы предпочитаете перебазировать my_branch и принудительно толкать его. Это необходимо, только если над my_branch работают несколько человек, и поэтому принудительное нажатие не будет возможным.

Итак, если только вы работаете над веткой, то перебазируйте ее и принудительно толкайте, когда это необходимо. Если над веткой работают другие люди, объедините в нее основную ветвь и выполните обычный push.

...