git checkout $(git log -1 --pretty='%h' -- <path>)^ -- <path>
Повреда
Използване на git log
за намиране на последния комит, засягащ желания файл
$(git log -1 --pretty='%h' -- <path>)
- Изпълнява командата
git log
с помощта на форматиране --pretty
, което показва само хеша.
- Използва разделителя
--
за изрично указване на файл, а не препратка към къмит.
- Следвано от пътя и името на файла, който искаме да извлечем.
- Опаковахме всичко това в
$()
, за да можем да го вградим в друга git команда като променлива.
- Това ще върне ангажимента, в който е премахнат дадения файл.
Това, разбира се, може да се използва самостоятелно без $()
, ако просто искате да знаете кога този файл е бил премахнат - промяната или премахването на красивото форматиране ще ви даде повече информация за намерения ангажимент.
Използване на git checkout
за извличане на файл във вида, в който е бил в даден комит
git checkout <ref>^ -- <path>
- Изпълнява
git checkout
с помощта на ангажимент и указване на път.
- Когато е указан път, git просто пресъздава състоянието на този път при предоставената препратка.
- Добавяйки морков
^
към препратката, ние всъщност сочим към непосредствения предшественик.
- Искаме непосредствения предшественик, защото къмитът, който получаваме от журнала, няма да съдържа файла - тъй като това е комитът, в който файлът е изтрит.
Съберете всичко заедно и проверявате файла в състоянието, в което е бил при комита точно преди този файл да бъде премахнат. Ако стартирате това на файл, който не е премахнат, то просто ще отмени каквато и да е промяна, която е направена най-скоро на този файл.
Псевдоним
git config --global alias.unrm '!COMMIT=$(git log -1 --pretty='%h' -- "$1"); git checkout $COMMIT^ -- "$1"'
Създадох псевдоним от това, наречен unrm
, като un-remove. Ако изпълните горната команда, от този момент нататък просто ще трябва да изпълните..
git unrm <path>
Редактиране: Добавих обратна връзка към командата.
git config --global alias.unrm '!COMMIT=$(git log -1 --pretty='%h' -- "$1"); git checkout $COMMIT^ -- "$1"; echo "File: $1, was restored from commit $COMMIT"; git show -s $COMMIT'
Сега той ви информира какво е направил и ви показва къмита, от който е възстановил файла.
person
eddiemoya
schedule
06.04.2013