2016-10-14 17 views
1

Как я могу показать содержимое файла для каждого файла в фиксации?Git - Как показать содержимое файла для каждого файла в commit?

Например, предположим, что у фиксатора было изменено 20 файлов. Прямо сейчас, я использую git show *commit*:*file_path* 20 раз для каждого файла.

Есть ли способ получить всю эту информацию только в одной команде git?

+0

Вы ищете * содержимое измененных файлов * или * список измененных файлов *? –

+0

Содержимое измененных файлов. Я уже использую 'git diff - name-only commit', чтобы получить список измененных файлов. – ab2231ss

ответ

1

Самый простой способ - просто проверить, что фиксация, а затем посмотреть на эти файлы (и игнорировать любые другие файлы). Обратите внимание, что вы можете проверить на другое место работы дерева, например, с использованием git worktree add (доступна с Git версии 2.5, в основном надежны, как в 2.6.x, но лучше быть на 2.8 и, вероятно):

$ git worktree add /tmp/tmpbranch HEAD~3 
Preparing /tmp/tmpbranch (identifier tmpbranch) 
HEAD is now at ... 
$ ... work with files in /tmp/tmpbranch ... 

Вы можно увидеть, что у вас есть с:

$ git worktree list 
/home/torek/[path] d22d10a [master] 
/tmp/tmpbranch  b6fc8a3 (detached HEAD) 

и очистки, как этот:

$ rm -rf /tmp/tmpbranch 
$ git worktree prune 

Обратите внимание, что вы можете поместить новую работу дерево в любом месте, но я бы поставил его где-то из текущей работы -находятся (или даже в/tmp, как это), чтобы избежать путаницы.

(я назвал это tmpbranch, но с использованием HEAD~3 как совершить спецификатор приводившего отделяться. Без этого, Git бы проверил HEAD совершить под новым названием филиала tmpbranch. Давать имя филиала как за направление спецификатор проверяет эту ветвь в новом дереве дерева, если вы не добавите --detach, чтобы получить отдельную головку. Использование хеш-кода для фиксации должно получать от вас отдельную HEAD каждый раз.)

+0

Спасибо, я волновался, что мне нужно будет сделать что-то подобное. – ab2231ss

+0

Ну, вы всегда можете просто использовать цикл сценария оболочки: 'для пути в p1 p2 p3 ... pN; do git show $ commit: $ path>/tmp/dir/$ path; done'. Основным недостатком 'git show' является то, что он не запускает файлы через фильтры (что также является его основной плюс). Я просто думаю, что простое временное дерево работы * проще *. – torek

0

Вы можете в интерактивном режиме перевязать свои коммиты и раздавить их. Затем сделайте git для этого хэша. Например, вы можете сделать следующее:

git rebase -i HEAD~20 
# your terminal will display either nano editor or vim. The format will be as such 
# pick *commit_hash* *commit_message* 
# pick *commit_hash* *commit_message* 
# pick *commit_hash* *commit_message* 
# pick *commit_hash* *commit_message* 

#change all of your 'pick' to 's' (s means squash). Start from the bottom and go up 
#Save your changes on which ever editor you are using. Git will prompt you to name your squash commit 
# Then just do git show *commit_hash* 

Надеюсь, это поможет!

+0

Тогда вы можете отменить свои изменения, посмотрев на git reflog – gkalikapersaud

+0

Это хорошая идея. Я так не думал об этом. Я попробую. Благодарю. – ab2231ss

+0

Дайте мне знать, если у вас есть какие-либо вопросы. – gkalikapersaud

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