2014-12-02 1 views
1

У меня есть ветка (Branch A), в которой добавлено около 300 файлов, я затем объединил это в мастер. Слияние объединило мастер, поэтому я удалил все 300 файлов и совершил удаление этих файлов. Затем я перешел в Branch A и исправил переопределение, но слияние этой ветки не приведет к переносу этих файлов, поскольку они не были обновлены с момента фиксации, которая их удалила. Есть ли способ вишни - выбрать только удаленные файлы из фиксации, чтобы я мог вернуть их?Черри выбирают конкретные фиксации и восстанавливают только удаленные файлы?

+0

Хотя ваша проза очень ясно, этот вопрос все еще может быть улучшена за счет увеличения его с минимальным набором мерзавца команд, которые можно использовать, чтобы воспроизвести вашу точную проблему, и государство вы хотите хранилище быть. – merlin2011

+0

@ merlin2011 Я хотел бы добавить 300 файлов обратно в мою основную (или развить) ветвь, желательно незафиксированную. Я использовал git add и git rm для добавления и удаления файлов перед фиксацией. git merge, чтобы объединить ветвь A в master. – Jtanacredi

+0

Вы пытались сделать «git revert» на коммите, который удалил 300 файлов? – Christopher

ответ

3

На вашей главной ветке получите список удаленных файлов со времени предыдущей фиксации.

git diff --name-status HEAD~1 | grep '^D' | cut -c 3- > /tmp/FileList.txt 

Затем Переберите список удаленных файлов и использовать git show для извлечения данных файлов из другой ветви.

for line in $(cat /tmp/FileList.txt); do git show OtherBranchName:$line > $line; done 

К сожалению, это не обрабатывает имена файлов с пробелами, но мы можем использовать this answer, чтобы исправить эту проблему.

IFS=$'\n' 
for line in $(cat /tmp/FileList.txt); do git show OtherBranchName:$line > $line; done 
Смежные вопросы