2013-05-07 2 views
2

У меня есть github ветвь, которую я нажимаю на github, когда главная ветвь достигает некоторого приемлемого состояния (сделали это один раз). Для этого я сделал:git merge squash - разрешение конфликтов, когда все, что я хочу, это изменения от ветки, которую я раздавил из

[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).
  • Есть ли простой, идиотизм способ достичь этого (без прохождения каждого конфликта).
  • В качестве бонуса я хотел бы знать, что Использование локальной версии и Использование Remote Версия означает в этой картинке - msysgit:

    enter image description here

+0

_I хотел бы знать, что использовать локальную версию и использовать Remote версии означает в этой картинке - msysgit_: это по-прежнему mystery –

ответ

3

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

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

$ 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 

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

1

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

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

+0

Чтобы совершить, я должен сначала разрешить конфликты, но эти конфликты слияния - это то, что я получаю (а также блуждающий) –

+0

Если вы не совершили ничего, кроме слияний с веткой github, я бы сбросил текущее слияние и запустил его снова. 'git reset --merge' отлично работает. –

+0

Я не делаю разницы - все еще возникают конфликты –

Смежные вопросы