2013-02-24 3 views
2

Дело в том, что в течение 4 недель я разработал проект в двух разных местах. На этом этапе у меня есть два разных каталога на моем жестком диске, каждый из которых содержит папку .git со всеми коммитами.git logic missing

На folderOne у меня есть что-то вроде этого:
A - B - C - D - E - F - G
На folderTwo у меня есть следующие фиксации:
A - B - X - Y - Z

Что мне нужно следующее:
A - B - X - Y - Z - C - D - E - F - G

В этой точке I знаю, что мне нужно переместить голову из forlderOne на этап B

git br gStage    # save the G stage into a branch 
git reset --hard HEAD~5  # move master on stage B 

Теперь мое намерение состоит в том, чтобы copy/paste содержимое из folderTwo в folderOne, но я знаю, что это не правильный путь.

Можете ли вы рассказать мне, как я могу получить A - B - X .. - C .. G.

также, пожалуйста, не стесняйтесь критиковать мою логику.

ответ

1

Предполагая, что A и B в обоих хранилищах фактически одинаковы (как в одном и том же идентификаторе фиксации), тогда я бы пошел по другому пути. Я бы принести ветку folderOne «сек в folderTwo:

git fetch /path/to/folderOne master:folderOne-master 

Затем я использовал бы перебазироваться:

git rebase master folderOne-master 

Это должно воспроизводить коммиты в folderOne мастера на верхней части текущего мастера, обращая внимание на оставляйте A и B отдельно, поскольку они общие. После этого шага, folderOne-master должен иметь график:

A - B - X - Y - Z - C - D - E - F - G 

Теперь убедитесь, что вы на мастере в folderTwo и объединить folderOne-master ветви:

git checkout master 
git merge folderOne-master 

Последняя команда должна сделать быстродействую- вперед, и вы должны увидеть приятную линейную историю, о которой вы просили.

Просто, чтобы понять, если то, что вы действительно хотите это содержание, и не обязательно заботиться о линейной истории, то вы можете сделать это вместо:

git fetch /path/to/folderOne master:folderOne-master 
git merge folderOne-master 
1

То, что вы хотите использовать функции GIT перебазирования: http://git-scm.com/book/en/Git-Branching-Rebasing

Вы должны быть в состоянии нажать изменения из папки One в папку второй. Затем вы должны создать один репозиторий, где ветви кода после фиксации B, один с C - D - E - F - G, а другой с X - Y - Z.

После этого вы можете переустановить ветку, начиная с commit C после совершения Z, в результате получится одна ветвь, из которой вы можете работать.

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

  • Нет связанных вопросов^_^