Как я могу скопировать множество файлов, определенных по расширению, во многие папки из одной ветви удаленного хранилища в другую?
Кажется, я изменил не только свои бэкэнд-файлы в удаленной ветке, но и многие файлы внешнего интерфейса. Теперь они изменены в моей ветке, и я не могу слить ее с главной веткой.
Как я могу скопировать файлы, выбранные по расширению, из одной ветви в другую?
- Я нахожусь на особенной ветке.
- Многочисленные *.html файлы в проекте и в ветке функций плохие.
- В ветви функций есть много полезных текущих изменений в.java и.xml.
- Я хочу получить все *.html файлы из текущей ветки master и поместить их в текущий проект. Или в ветку функций.
2 ответа
Я приведу пример для .py
файлы. Попробуйте сделать слияние, затем
find -name '*.py' -print0|xargs -0 git checkout --ours --
или же
find -name '*.py' -print0|xargs -0 git checkout --theirs --
"Наш" означает локальную ветвь, а "их" означает удаленную ветвь (за исключением случаев, когда происходит перебазировка, когда их значения меняются местами).
Вы можете делать это столько раз, сколько необходимо для типов файлов, которые вы хотите использовать для защиты других изменений.
Затем закончите слияние обычным способом.
Единственная проблема заключается в том, что это может не работать надежно с файлами, которые были удалены в одной из ветвей, но изменены в другой ветви. Так что следите за такими случаями.
Git не позволяет частичное слияние веток. То есть, когда вы объединяете, вам нужно объединить всю информацию - вы не можете игнорировать некоторые файлы и включать другие... (ну, вы можете, но это очень плохая практика и включает в себя только притворство, что вы сделали слияние).
Тем не менее, есть несколько способов, которыми вы можете продолжить.
Вы можете игнорировать тот факт, что ваша ветка находится на удаленном компьютере - в git ветках есть ветви, независимо от того, где они находятся. git pull
/fetch
загрузит ваши удаленные изменения, чтобы вы могли работать с ними.
1) Простой - игнорировать историю
Это включает в себя принятие всех ваших изменений в ветке функций, добавление только тех, которые имеют расширение, и внесение большого коммита с этими изменениями в master
:
git checkout feature
git reset master..feature
- сброс до пересеченияmaster
а такжеfeature
git add -- *.txt
- добавить все.txt
файлыgit commit
- (
git reset --hard
чтобы удалить файлы, которые вы не хотите) git merge
2) Комплекс - Сохранение истории
- использование
git rebase -i
интерактивно разбить каждый коммит на 2 - те, которые редактируют.txt
файлы (например) и те, которые этого не делают. - После использования
git cherry-pick
принимать только те коммиты, которые вы хотите, в новую ветку, называемуюfeature-txt-files-only
например. - Объедините это с вашим
master
ветка.