Ответ 1
Если вы хотите увидеть изменения, сделанные в каждом коммите, даже файл был переименован, вы можете использовать опцию -p
для git log
:
git log -p --follow [file/with/path]
После долгих поисков я не нашел удовлетворительного метода, который прост в использовании для просмотра полной истории перемещенного файла в Git и, что более важно, в Gitk. Используя "git log --follow [filePath]", и даже "gitk --follow [filePath]" дает вам коммиты, в которых был задействован файл, но не покажет вам фактическую историю изменений файла перед перемещением. Таким образом, я придумал грубое, но простое решение обходного решения.
Этот процесс позволит вам просмотреть историю файла перед перемещением. Если было несколько ходов, вышеуказанный процесс можно повторить.
Если есть какие-либо более эффективные решения этой проблемы, особенно если есть способ объединить эти шаги, чтобы отобразить полную историю с ходами, это было бы высоко оценено.
Если вы хотите увидеть изменения, сделанные в каждом коммите, даже файл был переименован, вы можете использовать опцию -p
для git log
:
git log -p --follow [file/with/path]
Здесь функция bash, которая должна показать вам историю файла (с использованием gitk) во всех его воплощениях... Я оставлю его как упражнение для читателя, если он понадобится для другой оболочки:
# bash
gitk_follow () {
while (( "$#" )); do
git log --oneline --name-status --follow $1;
shift;
done | perl -ne 'if( s{^(?:[ACDMRTUXB]|R\d+)\s+}{} ) { s{\s+}{\n}g; print; }' | sort -u
}
# used as:
gitk $(gitk_follow some_file)
обновление:
Изменен для использования perl, потому что я не обращал достаточно пристального внимания на вывод из git журнала последней версии.
Другой альтернативой является использование SourceTree приложения (GUI), разработанного Atlassian. Внутри приложения вы можете щелкнуть правой кнопкой мыши по файлу и выбрать "Log Selected..."
.
Во всплывающем окне оно позволяет вам "Переименовать файлы":
Я также использую GitHub для Mac, но пока не видел там такой функциональности.
(Я не связан ни с одним из них!)
Более простая функция, использующая различные параметры журнала git и awk для точного определения имен файлов (и "-", которые нужны gitk):
# bash
gitk_follow () {
while (( "$#" )); do
git log --pretty="" --name-status --follow $1;
shift;
done | awk '{print $NF}' | sort -u
}
# used as:
gitk -- $(gitk_follow some_file)