2013-05-09 2 views
0

У меня есть две удаленные ветви, dev и rls. В настоящий момент мы работаем над филиалом dev. Моя rls ветка пуста/нетронутая. Я хочу переместить конкретную фиксацию (sha-1 хэшей) с dev на ветку rls. Пожалуйста, назовите меня лучшим, безопасным и простым способом сделать то же самое в Git.нажмите конкретную фиксацию из одной удаленной ветви на другую удаленную ветвь

Благодаря ...

ответ

1

Если вы ищете rls быть снимком dev ветви на некоторых произвольной фиксации, вы можете использовать git reset, чтобы переместить указатель ветви на коммят вы ищете. Удостоверьтесь, что у вас нет неустановленных изменений при выполнении этого.

git checkout rls 
git reset --hard <SHA-1 of commit in dev> 

Пример:
Если dev выглядит следующим образом:

A - B - C - D 

и вы хотите rls выглядеть следующим образом:

A - B 

вы могли бы сделать

git checkout rls 
git reset --hard <sha-1 of B> 

Однако, если вы хотите выбрать более конкретный диапазон коммитов, который вы хотите нажать на rls, вы должны использовать команду git cherry-pick.

git checkout rls 
git cherry-pick <non-inclusive-starting-SHA1>..<inclusive-ending-SHA1> 
+0

после выполнения жесткого сброса, я сделал толчок для изменения изменений в ветке rls. благодаря – user265950

2

Одним из способов было бы использовать git cherry-pick для того, чтобы выбрать точное обязательство вы хотите сообщить о rls отрасли.

См. "Can anyone explain what git cherry-pick does?" для получения дополнительной информации.

Затем вы можете нажать rls на соответствующую дистанционную ветвь.

Итак:

  1. вишневого выбор локально для того, чтобы иметь rlsместной ветви, которая выглядит как-то вы хотите опубликовать (нажимной)
  2. нажимного rls на удаленный репозиторий
+0

позвольте мне рассказать о моем вопросе снова. Я хочу переместить весь код до определенной фиксации из моего dev в ветвь rls. Это похоже на перемещение кода из ветви dev в любой момент времени в ветвь rls. Спасибо .. – user265950

+0

@ user265950 уверенный, это то, что git cherry-pick для: он может сообщать о множестве коммитов. Если вы хотите, чтобы эти коммиты * ушли * из dev, тогда вам нужно сделать интерактивную перезагрузку. – VonC

+0

То, что я наблюдал, когда я вишу, выбираю фиксацию из одной ветки в другую, она создает новый SHAID. Но когда я использую объединение в другую ветвь, он использует тот же SHAID. как это объясняется? и почему так? – user265950

1

Если вы хотите переместить весь код до определенной фиксации в ветвь rls, используйте git merge. Например,

git checkout rls 
git merge [SHA1 of last commit you are interested in] 
+0

Спасибо, Брэд. Поэтому идеально подходит разница между жестким сбросом и слиянием. После выполнения сложного сброса и слияния мне пришлось запустить команду push. Кажется, что слияние и жесткий сброс помогают мне достичь того же, что мне нужно. пожалуйста, уточните меня о точном различии. – user265950

+0

Может быть, я понял. С Hard reset я могу перемещаться в любой момент времени, вперед и назад. Но слияние Merge только движется вперед линейно. Но по существу для моих требований, оба помогают мне на данный момент. Это верно? – user265950

+0

Большая разница заключается в том, что при слиянии вы будете использовать другие фиксации в своей истории. Поэтому, если бы у вас были другие изменения в rls, вы бы сохранили их с git merge, но потеряли бы их с сбросом git. Существуют случаи, когда они необходимы. – Brad

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