Подтвердить что ты не робот

Вам нужно создать ветку для проверки конкретной версии git?

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

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

4b9b3361

Ответ 1

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

git checkout <revision to check out>

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

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

git checkout <old branch name>

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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