Предотвратить ненужные коммиты с помощью git merge - PullRequest
0 голосов
/ 01 сентября 2018

Мои глаза были по всей этой странице: Git merge без автоматической фиксации

Я хотел верить. Но я попытался, и реальность разошлась.

У меня есть это:

git fetch origin;
git merge --no-edit origin;

кажется, что это создает новые коммиты, даже если между удаленной и локальной ветвью не было никаких изменений.

Я не думаю, что используя

 git merge --no-ff origin;

или

git merge --no-commit origin;

ответы. Как я могу объединить пульт с локальным без внесения изменений, если нет изменений? Может быть, не делать слияние вообще, а сначала проверить, есть ли разница?

Что меня смущает : я предполагаю, что --no-commit сломается, если в удаленной ветви будут изменения, которые необходимо объединить с локальной ветвью, потому что разве это не всегда требует новой фиксации?

1 Ответ

0 голосов
/ 01 сентября 2018

Таким образом, как отметил Ry-, если в удаленной ветви не было никаких изменений, вывод будет Already up to date., и фиксация отсутствует. Поэтому я не уверен, что это касается поведения, которое вы считаете проблематичным, но я подозреваю, что оно может:

Допустим, у вас есть локальное изменение и удаленное изменение, и вы тянете пульт с помощью git fetch git merge Ваше дерево будет выглядеть так:

£ git log --oneline --graph --decorate
*   153b72e (HEAD -> master) Merge branch 'b2'
|\
| * eb48067 (b2) b2 mod
* | 6397e45 master mod
|/
* 034e374 initial

У нас есть два фактических коммита, а теперь коммит слияния. Немного грязно для, возможно, крошечного изменения конфигурации, зарегистрированного на машине сборки или что-то в этом роде.

Так что вместо этого мы можем сделать это так (вместо git merge):

£ git rebase b2
First, rewinding head to replay your work on top of it...
Applying: master mod
£ git log --oneline --graph --decorate
* 49de99c (HEAD -> master) master mod
* 5019681 (b2) b2 mod
* 1f8b73e initial

Помимо пропуска merge commit, это также пропускает identical commits. Другими словами, это то, что нужно делать, если удаленная ветка на самом деле не является тем, что вы считаете веткой (хотя технически это так).

...