Как я могу скопировать множество файлов, определенных по расширению, во многие папки из одной ветви удаленного хранилища в другую? - PullRequest
0 голосов
/ 04 мая 2018

Кажется, я изменил не только свои бэкэнд-файлы в удаленной ветке, но и многие файлы внешнего интерфейса. Теперь они изменены в моей ветке, и я не могу объединить ее с главной веткой.

Как скопировать файлы, выбранные по расширению, из одной ветви в другую?

  1. Я нахожусь в ветви функций.
  2. Многочисленные * .html файлы в проекте и в ветви функций плохие.
  3. В ветви функций есть много полезных текущих изменений в .java и .xml.
  4. Я хочу получить все * .html файлы из текущей ветки master и поместить их в текущий проект. Или в ветку функций.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Я приведу пример для .py файлов. Попробуйте сделать слияние, тогда

find -name '*.py' -print0|xargs -0 git checkout --ours --

или

find -name '*.py' -print0|xargs -0 git checkout --theirs --

«Наши» означают локальную ветвь, а «их» означает удаленную ветвь (за исключением случаев перебазирования, когда их значения меняются местами).

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

Затем завершите объединение обычным способом.

Единственная проблема заключается в том, что это может не работать надежно с файлами, которые были удалены в одной из ветвей, но изменены в другой ветви. Так что следите за такими случаями.

0 голосов
/ 04 мая 2018

Git не разрешает частичное объединение веток. То есть, когда вы объединяете, вам нужно объединить всю информацию - вы не можете игнорировать некоторые файлы и включать другие ... (ну, вы можете, но это очень плохая практика и включает в себя только притворство, что вы сделали слияние).

Тем не менее, есть несколько способов, которыми вы можете продолжить.

Вы можете игнорировать тот факт, что ваша ветка находится на удаленном компьютере - в ветках git есть ветви, независимо от того, где они находятся. A 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 веткой.
...