2016-11-02 12 views
0

В Tortoise HgWorkbench Я могу щелкнуть правой кнопкой мыши по saveset и выбрать Update ..., который позволяет мне заставить мое рабочее пространство установить его содержимое в соответствии с этим saveset. Я должен выбрать флажок «Отменить локальные изменения». Теперь я использую TortoiseGit, а также SourceTree с Git. Что такое эквивалентная команда для выполнения обновления для предыдущего узла в ветке? Фактически я хочу временно вернуть мое рабочее пространство к предыдущей версии, отбрасывая все, что в ней сейчас, но не теряя ни одного из моих предыдущих коммитов, а затем позже возвращать мое рабочее пространство к моей последней фиксации.Как сделать эквивалент TortoiseHg Обновление HgWorkbench с помощью TortoiseGit и SourceTree

+0

В простой git вы можете сделать это таким образом http://stackoverflow.com/questions/1146973/how-do-i-revert-all-local-changes-in-git-managed-project-to-previous- state # 1146981 –

ответ

1

Чтобы вернуться к предыдущей версии и отменить последующие локальные изменения, откройте журнал, щелкните правой кнопкой мыши соответствующую ревизию и выберите Reset master to this.

Если вы хотите вернуться к предыдущей ревизии без затрагивающей изменения уже совершенные, откройте журнал, щелкните правой кнопкой мыши на соответствующей ревизии и выберите Switch/checkout to this.

Switch/checkout image

Аналогично TortoiseHg, активный пересмотр выделен жирным шрифтом: Active revision

Чтобы снова вернуться к последней версии мастера, просто щелкните правой кнопкой мыши на нем и выберите Switch/Checkout to "master":
Revert back to master

Временная ветвь, которая была создана, также может быть удалена щелчком правой кнопки мыши по ее записи в журнале и выбором Delete refs/head/tmp_branch.

Чтобы открыть журнал, щелкните правой кнопкой мыши папку, содержащую репозиторий (она будет иметь скрытую подпапку под названием .git) и выберите TortoiseGit -> Show log. Значение log является контекстно-зависимым. Если вы тогда увидите полную историю изменений для текущей ветви. Однако также можно открыть журналы подпапок или отдельных файлов, чтобы просмотреть их историю изменений.

+0

Как вы попадаете на график, показанный на ваших диаграммах? С TortiseHG я правой кнопкой мыши на папку репозитория и выберите Hg Workbench, но я не могу найти эквивалент для TortoiseGit. В SourceTree есть опция правого щелчка для «Сбросить текущую ветку на эту фиксацию», будет ли она такой же, как «Switch/Checkout to this» в TortoiseGit? – JonN

+0

Я обновил свой ответ запиской об открытии журнала. Для вашего второго вопроса я никогда не использовал SourceTree, поэтому я не могу сообщить, что могут сделать его варианты. Похоже, это было бы так же, чтобы вы могли попробовать его в тестовом репозитории и посмотреть, что произойдет. – Malice

+0

Следует отметить, что опция SourceTree «Сбросить текущую ветвь до этой фиксации» НЕ выполняет эквивалент обновления Hg. Он делает REVERT, поэтому, если вы сбросите три пересмотра, он удалит предыдущие три набора изменений из локального репозитория. Когда я сказал, что хочу вернуться к предыдущей версии, я имел в виду только в рабочей области. Я не хотел ничего разрушать в репозитории. Эквивалентная команда TortoiseHg Update в SourceTree Git - это Checkout ... – JonN

0

Теперь с лучшим пониманием ветвей Git я понимаю свое замешательство, когда задавал этот вопрос. Поэтому я делюсь ею на других, таких как я, идущих из Mercurial и пытающихся впервые использовать Git.

Основополагающая вещь, которую я не понимал, это то, что Git вызывает ветку, на самом деле является просто указателем или ссылкой на конкретный узел фиксации (change-set). Это не означает (как подразумевает ветка имени) связанный набор коммитов или узлов. Еще одна основная путаница, которую я имел, заключалась в том, что коммиты могут существовать в Git без ветви (ссылки на узлы) к ним. В отличие от Mercurial, в Git, если вы переместите указатель текущей ветви на предыдущий узел и нет другого указателя ветки, ссылающегося на какой-либо из потомков, тогда эти узлы перестают достижимы и фактически теряются. Когда я делаю фиксацию в Mercurial, дерево компиляции для общего варианта использования статично. То есть, если я перезагружу свое рабочее пространство, узел 3 совершает предыдущие, то эти три последующих узла не только достижимы, они также видны в дереве графа. Но с Git там должен быть указатель на узел или один из его потомков, чтобы он отображался на графике. Это означает, что когда я переношу свой текущий указатель на ветку в другое место, я теряю все последние коммиты, которые являются потомками. Это совсем не то, что я намеревался. Я просто хочу временно перезагрузить текущую рабочую область с предыдущей фиксацией для целей тестирования, и я не хочу изменять или потерять какие-либо предыдущие коммиты. Итак, как мне это сделать с Git? Самый простой способ сделать это - сначала выполнить любые выдающиеся изменения в моей рабочей области, а затем сделать проверку узла-предка новым именем ветки, например RegressTest.(Как упоминал @Malice), я могу использовать RegressTest для загрузки любого фиксатора во всем дереве для целей тестирования. Затем, когда я закончил, я могу удалить указатель филиала RegressTest , а затем проверить мою текущую ветку снова. Удаление RegressTest не потеряет никаких коммитов, поскольку они уже ссылаются на один или несколько указателей разветвления.

Причина ответа @Malice не ясна для меня, я не понял, почему мне нужно было создать tmp_branch, потому что я не понял, что без ссылки на узел фиксации Git потеряет доступ, или эффективно удалять те неучтенные узлы. Исходя из Mercurial, это была внешняя концепция.

Добавлено 12-27-2016 Я также понимаю, что ненадежные узлы фактически не удаляются, но все еще находятся в репозитории и могут быть доступны через идентификаторы фиксации и журналы ветвей, но не так легко, как если бы они появились на графике.