Вам нужно создать ветку, чтобы проверить конкретную версию git? - PullRequest
21 голосов
/ 11 мая 2009

Обычная вещь, которую я хотел бы сделать, - вернуть мою рабочую копию к определенной ревизии, провести некоторое тестирование, а затем вернуть ее главе моего текущего мастера. В прошлом я наивно делал "хэш проверки", чтобы потерять голову. С тех пор я узнал, что могу создать ветку и проверить это, переключиться назад и удалить ветку, но это кажется слишком большим количеством шагов для простой проверки. На языке SVN есть ли способ быстро вернуться, а затем быстро вернуться к кончику сундука в git?

Редактировать: Я думаю, что моя путаница проистекает из того факта, что когда я извлекаю хэш, а затем git log, я не вижу изменений, которые произошли после извлеченного хэша (что разумно, когда ты думаешь об этом). Но принятый ответ правильный; "git checkout branch" вернет голову к предыдущей ветке.

Ответы [ 4 ]

28 голосов
/ 12 мая 2009

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

git checkout <revision to check out>

Это отвлечет вас от ветки темы, в которой вы работали (без ветки), в которой рабочая копия ссылается непосредственно на идентификатор фиксации, а не на имя ветви, как обычно.

Затем, чтобы вернуться назад, просто:

git checkout <old branch name>

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

Таким образом, пока изменения, которые вы хотите сохранить, находятся в ветке, вам не нужно беспокоиться о потере git checkout.

7 голосов
/ 06 июня 2011

Вы можете создать ветку на конкретном коммите, который хотите оформить (со страницы руководства)

git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]

, поэтому заполните <start-point> как SHA1, с которого вы хотите начать новую ветку <branchname>, и ваша голова не будет отсоединена от расширяющейся ветви.

Будут и другие вещи, которые вы, вероятно, захотите сделать, чтобы сохранить некоторые из ваших рабочих файлов в желаемом состоянии ...

4 голосов
/ 12 мая 2009

Да, вы можете посетить любую произвольную ревизию с помощью «git checkout», как вы описываете. Если вы запрашиваете произвольную ревизию, а не ветку, у git не будет никакого очевидного способа отслеживать, какие изменения вы вносите. Вы можете увидеть, где вы были раньше, посмотрев reflog («git reflog show») - но в целом вы бы уже работали на ветке, поэтому, вероятно, просто захотите вернуться к этому с помощью «git checkout master» или подобного. 1001 *

Обратите внимание, что этот метод не будет автоматически обрабатывать непринятые изменения в вашем рабочем пространстве - либо зафиксировать или сохранить ваши изменения перед перемещением между ветвями, либо использовать "git checkout -m", чтобы переносить их при перемещении (и готовы справиться с конфликтами слияния, если внесенные вами изменения не являются тривиальными).

Я думаю, что в последних версиях git введено сокращение "@ {- 1}" для слова "где я был до моего последнего перемещения", что в действительности может быть тем, что вам нужно в этом случае. (Я не использовал его, просто прочитайте об этом в примечаниях к выпуску).

3 голосов
/ 11 мая 2009

Если вы хотите, чтобы Git показывал подсказку какой-либо строки изменений, вам нужно, чтобы она была разветвленной или помеченной. Но даже если вы не делаете ветку, ни один из коммитов не теряется. Он остается в репозитории как узел мусора (то есть недоступен ни через какую-либо ветку или тег) и удаляется только через несколько дней / недель, когда вы делаете «git gc».

Так что, если вы хотите иметь легкий доступ к изменениям, лучше всего создать временную ветку и работать там. Если вы делаете коммиты за пределами ветви, а затем извлекаете другую ветку, то вам нужно будет использовать команду «git reflog» или просмотреть журналы (каталог «.git / logs»), чтобы выяснить, какой хеш изменений ты проиграла. Когда вы знаете хеш, вы можете сделать «git checkout hash» или «git checkout -b new_branch hash» и восстановить подсказку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...