2012-01-07 3 views
2

Могу ли я выполнить 'merge', который обновляет только существующие файлы в текущей ветке?git 'merge' только существующие файлы

Например, у меня есть ветка1:/file1,/x/file2,/file3. И branch2:/file1,/x/file2,/z/file4. Я хочу сначала обновить файлы file1 и file2 во второй ветке с файлами.

В качестве решения я вижу создание отдельных коммитов в ветке1 для этих файлов, а не использование черешни во второй ветви.

UPD: Благодаря @fge, я основал это решение (не так просто, как я ожидал):

git co branch2 
git co branch1 -- ./ 
git reset ./ 
git ci -a 
git clean -f 
+2

Возможно, вам стоит подумать над тем, что вы на самом деле пытаетесь выполнить здесь. Эти две долгоживущие ветви? Вам придется делать подобные слияния? Являются ли нежелательные файлы все в одном каталоге, представляя что-то сплоченное? Вы хотите получить несуществующие файлы и изменения к ним когда-нибудь позже? Были ли эти файлы когда-либо существовать в текущей ветке? – Cascabel

+0

Не могли бы вы написать команды git, пожалуйста? Я знаю, что «co» означает «checkout», но не может понять, что означает «ci». Благодарю. – Andrei

+0

Хорошо нашел некоторые ярлыки для git (.gitconfig) здесь: https://githowto.com/aliases. Поэтому «ci» означает «совершить», если я не ошибаюсь. – Andrei

ответ

1

Вы можете выполнить такие в то время как на branch2:

git checkout branch1 -- file1 x/file2 

Затем git add измененные файлы и зафиксировать результат.

Если вы хотите иметь сообщение о фиксации ветки 1, вы можете зафиксировать его с помощью git commit -c branch1.

Отметьте, что branch1 действительно является refspec. Ветвь в git - это не что иное, как фиксация, но поскольку фиксация имеет ссылки на ее родителя (ов), это, по сути, «ветвь».

+0

Это не будет означать это как слияние. –

+0

«Слияние» было в кавычках. Отсюда и мое решение. – fge

+0

Это не то, что я действительно хочу, но, возможно, это самый простой способ. Таким образом, не разрешаются конфликты в файлах, и необходимо перечислить все необходимые файлы. Петли Bash и ls могут помочь. – prcu

1

Продолжайте слияние, как обычно. Далее, изменить что NW совершить форму, которую вы хотите, удалив лишние файлы:

git merge other_branch 
rm file another_file #etc 
git add -A 
git commit --amend -C HEAD 

Теперь у вас есть слияние COMIT (2 родитель совершает определенный). Такие команды, как

git branch --contains 

будет работать правильно. Сделайте это только в том случае, если вы хотите слить.

+0

Это может привести к нежелательным коммитам/изменениям со второй ветви. OP никогда не говорил, что хочет внести изменения с другой ветвью, только набор файлов. – fge

+0

Наверное * опасно * отметить это как слияние, хотя ОП не осознает этого. Если вы выполните слияние, перепишите все так, чтобы на самом деле не включались все изменения из коммитов, и вы никогда не получите остальные изменения с последующим слиянием. – Cascabel

+0

Правильно, fge. Результат не обычный слияние. После этой операции произойдут две разные фиксации. Поэтому я написал «merge» в кавычках. – prcu

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