Git merge squash - разрешение конфликтов, когда все, что я хочу, - это изменения от ветки, которую я раздавил из

У меня есть ветвь github, которую я нажимаю на github, когда ведущая ветвь достигает некоторого приемлемого состояния (сделали это один раз). Для этого я сделал:

[email protected] /c/Dropbox/eclipse_workspaces/android/AndroidMonitoring (master)
$ git checkout github
Switched to branch 'github'
[email protected] /c/Dropbox/eclipse_workspaces/android/AndroidMonitoring (github)
$ git merge --squash master
Auto-merging src/gr/uoa/di/monitoring/android/services/Monitor.java
CONFLICT (add/add): Merge conflict in src/gr/uoa/di/monitoring/android/services/
Monitor.java
//...
Automatic merge failed; fix conflicts and then commit the result.

Я хочу только иметь рабочий каталог в том же состоянии, что и в главном HEAD.

  • Я пытаюсь сделать это неправильно (неоднократно сливайтесь - запишитесь в ветку github).
  • Есть ли простой, идиотский способ достижения этого (без прохождения каждого конфликта).
  • В качестве бонуса я хотел бы знать, что означает "Использовать локальную версию" и "Использовать удаленную версию" на этом рисунке - msysgit:

    enter image description here

Ответ 1

Ну, после многих поисковых запросов, оказалось, что моя стратегия была неправильной. git merge --squash не делает то, что я хочу, а именно, отражая мою ведущую ветвь в моей ветке github, не сохраняя историю коммитов в master (простое слияние было бы, но я не хотел иметь какую-либо ведущую историю в github).
Для одного он не удаляет удаленные файлы - для приятного объяснения см. здесь
Вероятно, есть и другие подводные камни, в том числе вечное разрешение конфликтов, которые не могут быть устранены

В любом случае, я думаю, что нашел правильный путь - один из подробных здесь

$ git checkout [email protected]{0}
$ git reset --soft github
$ git commit
$ git branch temp
$ git checkout temp
$ git branch -M github
$ git push -u -v  origin github:master

попробовал, и он работает так, как я хотел

Ответ 2

Вы должны следить за git merge --squash с помощью git commit, поэтому в вашем рабочем процессе есть возможная ошибка.

Вы можете использовать git merge -s theirs, чтобы указать, что вы всегда хотите, чтобы другая ветвь master в этом случае выиграла все конфликты слияния. (Хотя я удивлен, вы получаете конфликты слияния, если не выполняете отдельную работу в ветке github)