Git: получение имени исходного имени документа

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

Я уже пробовал следующие команды, но безуспешно. Я ожидаю увидеть фактическое исходное имя файла, пользовательское. Пример ожидаемого результата: «01_Introduction_Statistics.pages»

git log 
git log --pretty=oneline --graph --name-status
git show --pretty=oneline --graph --name-status
git diff --name-only
git svn log -v
git show --[=pretty<format>]
git show --oneline
git log --raw
git show --name-only

**git blame -f, --show-name       show original filename (Default: auto)

Кажется, что последний дает то, что мне нужно, но я не уверен, как его использовать. Я продолжаю получать сообщение «ошибка: неизвестная опция `-». Я понятия не имею, что это значит.

я уже пробовал

git blame -f, --show-name <hash code>

Он возвращает ошибку. Я растерян и растерян.

убери запятую после git blame -f,

Hujaakbar 08.05.2024 02:27

Спасибо! Я попробовал следующее, но безуспешно. git виноват -f --show-name d9f0e29d33065468f29efdc60ab361445d94b1a4 фатальный: в HEAD нет такого пути 'd9f0e29d33065468f29efdc60ab361445d94b1a4'

Chexpeare 08.05.2024 02:32

Что такое d9f0e29d33065468f29efdc60ab361445d94b1a4?

mkrieger1 08.05.2024 02:35

Вы можете попробовать git log --all --summary | grep -E 'rename|file move|move', в котором перечислены только сообщения о фиксации, указывающие на переименования (если вы помните сообщения о фиксации и используете повторяющийся шаблон для таких переименований). Если у вас есть представление о каталоге, в котором файл мог изначально находиться, вы можете выполнить поиск в этом конкретном каталоге, используя опцию --follow: git log --follow -- <directory_name>.

Christian 08.05.2024 02:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
66
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

в команде git blame флаг -f является псевдонимом для --show-name, ссылки.

Итак, вам следует использовать любой из них, а не оба.

Кажется, вы используете хэш фиксации в своей команде git Assessment, вместо этого используйте имя текущего файла:

git blame -f {currentFilename}

Я наконец получил это! Я использовал: git show --name-only ec391792f5a16ab350b20c9b2626425c4803cff1 Команда вернула имя рассматриваемого файла. Спасибо!

Chexpeare 08.05.2024 04:33

Это будет работать только в том случае, если строки не изменились до переименования файла.

Schwern 10.05.2024 21:06

Попробуйте git log --follow <current_file_name>.

Это должно дать историю файла, даже если он изменил имена.

Спасибо! Эта команда тоже хороша. Он возвращает историю имени файла в хеш-коде, а не непосредственно фактическое имя файла. Однако я все еще могу с ним работать и подключить хеш-код к команде: git show --name-only ec391792f5a16ab350b20, и она вернет имя файла на английском языке.

Chexpeare 10.05.2024 20:09

@Chexpeare Добавьте --stat, чтобы показать имя файла и переименовать его. git log --follow --stat <current filename>. Исходное имя файла является последним (самым старым).

Schwern 10.05.2024 21:04

Благодаря @mkrieger1, @Christian, @Hujaakbar и @jj2f1 я могу объединить их предложения с дополнительной следующей командой git и получить полное имя файла с расширением на английском языке:

git show --name-only <hash code>

Ответ принят как подходящий

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

git log --follow --summary --format= <filename>

--follow продолжим листинг истории посредством переименований. --format= подавляет обычный вывод. --summary показывает, когда файл был создан, переименован или изменены его разрешения.

$ git log --follow --summary -w --format= baz
 rename bar => baz (100%)
 rename foo => bar (100%)
 create mode 100644 foo

Первоначальное имя этого файла было foo. Он был переименован в bar без каких-либо изменений содержания. Затем снова переименовал в baz без изменений содержания.


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

По умолчанию он ищет файлы со сходством не менее 50%. Вы можете повлиять на это с помощью -M и -l.

Например, здесь я git mv baz blat добавил строку и внес некоторые изменения в пробелы.

commit 3c3240d16866a91b499fe17d478b82277c83aded
Author: Michael G. Schwern <[email protected]>
Date:   Fri May 10 12:22:59 2024 -0700

    mv baz blat, add this

diff --git a/baz b/blat
similarity index 37%
rename from baz
rename to blat
index dfa74aa..43b1a69 100644
--- a/baz
+++ b/blat
@@ -1,4 +1,7 @@
 this
+that
+
 other
-thing
+
+   thing  

В результате порог сходства оказался ниже 50%. Мне нужно снизить стандарты Git для поиска переименований до 30%.

$ git log --follow --summary --format= blat
 create mode 100644 blat

$ git log --follow --summary --format= -M.3 blat
 rename baz => blat (37%)
 rename bar => baz (100%)
 rename foo => bar (100%)
 create mode 100644 foo

Поскольку это эвристика, Git может ошибиться. Вам еще нужно пройти верификацию.

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

Ух ты! Отличный! Все это очень полезно. Мне удалось отследить весь цикл переименования набора рассматриваемых файлов. Замечательные советы и рекомендации! Спасибо, @Schwern!

Chexpeare 11.05.2024 23:35

Другие вопросы по теме