2015-04-16 3 views
2

У меня есть git repo на github.Мне нужно объединить копию моего сайта только с одним фиксатором

Кто-то взял репо (скопированный, не разветвленный, я не совсем уверен, как и почему), проделал большую работу около четверти файлов в нем, а затем загрузил новый git-репо в свои собственные область в github, содержащая ровно одну фиксацию - начальную фиксацию, содержащую все.

Если я пытаюсь объединить слияние, то каждый файл появляется как конфликт; он думает, что мы оба добавили файлы с нуля. Что, конечно, у нас есть.

Я мог бы вручную различить и объединить их все. Но мне бы этого не хотелось.

Я добавил в свое репо как удаленный.

Есть ли очевидный способ объединить только файлы, которые были изменены?

+0

Может ли [git patch] (http://git-scm.com/docs/git-format-patch) быть подходящим для вас? –

+0

Вы можете попробовать «git cherry-pick» из другого репо. При необходимости вам придется разрешать конфликты для каждого измененного файла в этом деле. – andybeli

ответ

0

Правильно, похоже, что права доступа к файлам везде в новой команде были изменены на 755; вот что заставляло все помечать как измененные.

How do I make Git ignore file mode (chmod) changes? предполагает, что проблема разрешима с помощью

git config core.fileMode false 

К сожалению, это не работает для меня; возможно, потому, что он смотрит только на изменения в рабочем дереве, а не на коммиты.

Вместо этого я пошел в новую ветку и сделал следующее

git diff --summary master | grep 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -I {} chmod -x {} 

Который затем выключен все исполняемые биты в новой отрасли.

git commit -a 
git log --oneline 

2f80315 Changing permissions to match master... 
c7896aa The Commit From The Other Fella 

git checkout master 
git cherry-pick 2f80315 
git commit --allow-empty 

Гарантирует, что все разрешения на каждый файл, который не был отредактирован матч, и в этот момент

git diff newfellasbranch 

показывает мне изменения, которые они сделали. Я счастлив, поэтому

git merge newfellasbranch --strategy-option theirs 

Возможно, это будет более простой способ.

0

Возможное решение:

git fetch https://github.com/blah/other-repo.git <branch> && git cherry-pick <commit> 

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

+0

В другом репо есть только одна фиксация, содержащая все; поэтому git cherry-pick, в этом случае, идентичен git-слиянию. – piersb

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