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.
Ответы
Ответ 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)