Примечание: я начал это как комментарий, но он достаточно длинный и действительно может использовать некоторое форматирование, поэтому я переместил его в ответ. Это ответ на ваш комментарий Тиму Байгелейзену:
Если вы ссылаетесь на мой пример ссылки, то проверка "Stereo_image_proc" работает, но я не вижу, чтобы это была одна из ветвей, как получилось?
Причина, по которой git checkout stereo_image_proc
не жалуется (и, кажется, ничего не делает, на первый взгляд), заключается в том, что git checkout
сама по себе на самом деле представляет собой две разные команды, объединенные в одну. По мнению некоторых людей (в том числе и у меня), это особенность или ошибка: аргумент git checkout
может быть именем ветви или путем .
В частности:
git checkout <em>branch</em>
просит Git переключиться, а иногда даже создать, а затем переключиться на ветку, имя которой вы указываете в командной строке.
Переключение на ветвь - это удивительно сложный процесс, в конце концов, но он начинается достаточно просто: он меняет понятие Git на HEAD
, так что вы находитесь в именованной ветке. У него есть еще одна очень полезная функция: перед тем, как Git фактически переключится на (и / или создаст) эту ветку, Git удостоверится, что это не затмит любую работу, которую вы случайно запустили на неправильно филиал.
git checkout <em>name1 name2 ... nameN</em>
, с другой стороны, просит Git извлечь определенных файлов из некоторых именованных или подразумеваемых коммитов . Часто это лучше всего записать как git checkout -- <em>file</em>
, где --
говорит Git, что имя не должно рассматриваться как имя branch . То есть, предположим, что у вас есть файл с именем master
и вы хотите извлечь его: тогда git checkout master
не будет работать, потому что это ответвление с именем master
, но вы хотите файл с именем master
. Так что git checkout -- master
говорит Git: не ветвь, файл.
Когда вы используете этот вид git checkout
, вы говорите Git: Я знаю, что начал редактировать какой-то файл или файлы, но теперь я решил, что редактирование этого файла или всех этих файлов было ошибка. Поместите их обратно в исходное состояние, превратив их в предыдущую версию каждого файла. Например, предположим, что у вас есть файл с именем README.txt
, вы начали его редактировать, а затем поняли, что вам следует создать новый файл документации. Вы копируете новый материал, добавленный в новый файл, но теперь вы хотите, чтобы README.txt
вернулся к тому, что было до того, как вы начали его редактировать. Итак, вы запускаете git checkout README.txt
, и стирает ваши изменения в файл.
Но что касается Git, присвоение имени каталога здесь (или папке, если вы предпочитаете этот термин) означает каждый файл в каталоге, включая любые подкаталоги рекурсивно, Поскольку stereo_image_proc
является каталогом, а не именем ветви, вы получаете эту вторую форму git checkout
.
Суть в том, что git checkout stereo_image_proc
говорит Git стереть все изменения, которые вы внесли в любые файлы в этом каталоге . Если вы не внесли никаких изменений, ну, нет проблем! Но если у вас есть, это может быть довольно пагубным.
Так как git checkout
имеет эти два режима - безопасный режим переключения ветвей и небезопасный затвор всей моей работы режим - вы должны принять обратите внимание, какой из них вы вызываете, каждый раз, когда вы запускаете git checkout
.