Когда вы извлекаете старый коммит, он не стирает новые файлы, а вместо этого перемещает вашу рабочую копию обратно в старую версию. Например, ваша история может выглядеть примерно так:
Refs: v-- master <-- HEAD
Commits: 1 2
--*------*
Files: | |
+- foo + foo
+- bar + bar
+ baz
Это означает, что у вас есть два коммита, 1 и 2 (конечно, они будут длинными шестнадцатеричными строками, но мы назовем их 1 и 2, чтобы было проще). В коммите 1 у вас есть файлы foo
и bar
. В коммите 2 вы добавляете файл baz
. Теперь, если вы проверяете коммит 1, это означает, что вы хотите переключить ваше рабочее дерево, чтобы оно выглядело точно так же, как в коммите 1, обновив свой HEAD
ref, чтобы указать на него:
Refs: v-- HEAD v-- master
Commits: 1 2
--*--------*
Files: | |
+- foo + foo
+- bar + bar
+ baz
Так что теперь ваше рабочее дерево выглядит так же, как в коммите 1; у вас есть только foo
и bar
. Если вы проверяете master
или фиксируете 2 снова, вы должны увидеть baz
вновь.
Это отвечает на ваш вопрос? Я не совсем уверен, почему вы захотите проверять коммит 1 и не показывать содержимое каталога, как в коммите 1, поэтому, возможно, я неправильно понимаю ваш вопрос.
Обратите внимание, что при проверке коммита 1 вы можете получить предупреждение о том, что у вас будет оторванная голова. Отделенная голова - это ссылка HEAD
, которая не указывает на ветку. Если у вас отдельная голова, то на любые новые созданные вами коммиты не будет ссылаться конкретная ветка; на них будет ссылаться только ваша HEAD
, а это значит, что если вы позже извлечете master
или другую ветку, на них ничего не будет ссылаться (кроме reflog).
Кроме того, когда вы проверяете коммит 1, если вы затем делаете git log
, чтобы посмотреть историю, он по умолчанию покажет вам историю текущей HEAD
ревизии (то есть версии, которая у вас есть на данный момент). проверено). Так как это указывает на ревизию 1, которая больше не имеет ничего в своей истории, вы увидите только ревизию 1 в истории. Вы по-прежнему можете просматривать историю других ревизий, обращаясь к ним напрямую или через ссылки, указывающие на них, например master
. В моем примере выше, если вы сделали git log master
, вы увидите историю, содержащую коммиты 1 и 2.
Чтобы увидеть полную историю вашего репо, я обычно использую gitk --all
, чтобы показать мне все ветви, теги и другие ссылки в моем репозитории, а также их историю. Вы упомянули, что используете EGit, с которым я не знаком, но у него может быть похожая опция «показать всю историю».