Git: обединяване зад промените

Сценарий:

  • Компютър A и компютър B са клонирали git хранилище от Github.
  • На компютър A правя промени в хранилище, ангажирам и изпращам към Github.
  • На компютър B правя промени в други несвързани файлове и извършвам ангажименти.
  • На компютър B се опитвам да натисна, но не мога, защото съм забравил първо да изтегля промените си.
  • На компютър B изтеглям промените и git създава ангажимент „Обединяване на клон „master“ на github.com:user/repo“.
  • На компютър B натискам промени в Github, но имам досаден и ненужен ангажимент „Сливане“ в хронологията на ангажиментите.

Как мога да използвам git merge, за да поставя ангажимента за сливане преди всички мои ангажименти, които не са били изпратени? Всичко е наред, ако това обърква SHA на ненатиснатите комити.

Трябва ли да git rebase нещо?


person wchargin    schedule 21.09.2013    source източник


Отговори (2)


Най-лесният начин да избегнете "досадното" обединяване:

git pull --rebase

Това автоматично ще пребазира вашите промени на компютър Б, така че историята да изглежда линейна. За повече информация относно повторното базиране вижте този отговор.

Ако вече сте прехвърлили своя ангажимент за сливане от компютър B към github, тогава е твърде късно: този ангажимент за сливане ще остане там завинаги. Ако не, пак можете да пребазирате. Но е по-лесно просто да git pull --rebase да го избегнете в бъдеще.

person mvp    schedule 21.09.2013

Ако искате git pull да има поведение на повторно базиране по подразбиране, можете също да поставите това във вашата конфигурация:

git config --global branch.autosetuprebase always

Тази опция в конфигурацията ще зададе поведението на повторно базиране, когато издърпвате за всеки клон. Ако искате да направите изтегляне със сливане, след като зададете това, можете да го направите с опцията --no-rebase.

git pull --no-rebase
person Pigueiras    schedule 21.09.2013