http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file
Я знайшов пост.
Але досі не знаю, у чому різниця між
git checkout <filename>git checkout -- <filename>
У якій ситуації я повинен використовувати перший та другий відповідно?
http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file
Я знайшов пост.
Але досі не знаю, у чому різниця між
git checkout <filename>
git checkout -- <filename>
У якій ситуації я повинен використовувати перший та другий відповідно?
Відповіді:
Спеціальний "варіант" --означає "трактувати кожен аргумент після цього пункту як ім'я файлу, незалежно від того, як він виглядає". Це не специфічно для Git, це загальна угода командного рядка Unix. Зазвичай ви використовуєте його для уточнення, що аргумент - це ім'я файлу, а не опція , наприклад
rm -f # does nothing
rm -- -f # deletes a file named "-f"
git checkout1 також --означає, що наступні аргументи не є його необов'язковим "дерев’яним" параметром, що вказує, яку комісію потрібно зробити.
Отже, у цьому контексті це безпечно використовувати --завжди, але він вам потрібен, коли файл, який ви хочете відновити, має ім'я, яке починається з -, або таке, як ім'я гілки. Деякі приклади для розрізнення гілок / файлів:
git checkout README # would normally discard uncommitted changes
# to the _file_ "README"
git checkout master # would normally switch the working copy to
# the _branch_ "master"
git checkout -- master # discard uncommitted changes to the _file_ "master"
і розбір варіантів / файлів:
git checkout -p -- README # interactively discard uncommitted changes
# to the file "README"
git checkout -- -p README # unconditionally discard all uncommitted
# changes to the files "-p" and "README"
Я не впевнений, що ви робите, якщо у вас є філія , назва якої починається з -. Можливо, не робіть цього в першу чергу.
1 в цьому режимі; "Оформити замовлення" також може робити кілька інших речей. Я ніколи не розумів, чому git вирішив реалізувати "відкинути невмілі зміни" як режим підкоманди "checkout", а не "повернути", як більшість інших VCSes, або "скинути", що, на мою думку, може мати більше сенсу у власних умовах git.
--як роздільник між варіантами та аргументами широко реалізований. Він працює для будь-якої програми / утиліти, яка використовує POSIX getopt(3)для обробки своїх параметрів командного рядка (див. man 3 getopt), Скриптів оболонок, які використовують getopt(1), і деяких програм, які реалізують його самостійно, але не гарантується, що вони універсально працюють.
--означає «заперечувати зміни» a la C / C ++ - і думав про це з тих пір. Розум роздутий!