Git: скопируйте все файлы в каталог из другой ветки
как мне скопировать все файлы в каталог из другой ветки? Я могу перечислить все файлы в этом каталоге, выполнив
git ls-tree master:dirname
затем я могу скопировать все файлы по отдельности, сделав
git checkout master -- dirname/filename
однако использование подстановочных знаков до сих пор было полным провалом. Это ничего не делает:
git checkout master -- dirname/*.png
хотя я думаю, что могу использовать сценарий bash для этого, должен быть более простой способ, верно?
3 ответов:
поскольку вы не пытаетесь перемещать файлы по дереву, вы должны быть в состоянии просто проверить каталог:
git checkout master -- dirname
Если в пути нет пробелов, и вы заинтересованы, как и я, только в файлах определенного расширения, вы можете использовать
git checkout otherBranch -- $(git ls-tree --name-only -r otherBranch | egrep '*.java')
если вы хотите сохранить историю, вы могли бы попробовать это... создайте новый
target-branchСmasterперед экспериментом.шаги ниже предполагают, что у вас есть две ветви
target-branchиsource-branchи каталогdir-to-mergeчто вы хотите слиться вsource-branch. Также предположим, что у вас есть другие каталоги, такие какdir-to-retainв цели, которую вы не хотите изменять и сохранять историю. Кроме того, предполагается, что вdir-to-merge.git checkout target-branch git merge --no-ff --no-commit -X theirs source-branch # the option "-X theirs", will pick theirs when there is a conflict. # the options "--no--ff --no-commit" prevent a commit after a merge, and give you an opportunity to fix other directories you want to retain, before you commit this merge. # the above, would have messed up the other directories that you want to retain. # so you need to reset them for every directory that you want to retain. git reset HEAD dir-to-retain # verify everything and commit.
Comments