Как вернуться к последнему коммиту в истории после того, как я использовал git reset для перехода к более старому набору изменений?

StackOverflow https://stackoverflow.com/questions/2540505

  •  23-09-2019
  •  | 
  •  

Вопрос

Предположим, моя история пойдет именно так :

A - B - C - D (ведущий)

Если я это сделаю git reset B, Я получу :

A - B (мастер)

Проблема в том, что, git log теперь покажите мне только историю от A до B, и я больше не увижу C и D.

Как я могу вернуться в D ?

Это было полезно?

Решение

Вы должны быть в состоянии видеть D с git reflog.

Видишь это статья , например.

Единственный раз, когда коммиты фактически удаляются, это если вы git gc --prune (так что будьте осторожны с этим!).

Если вы запустите git reflog прямо сейчас в репозитории, в котором работали, вы увидите множество изменений, которые выглядят примерно так:

c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive.
49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD
3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursive.
49d0608... HEAD@{3}: pull origin bugfixJ: Merge made by recursive.
854d44e... HEAD@{4}: commit: Add more cowbell to foo.c
6dbc22d... HEAD@{5}: pull origin bugfixI: Merge made by recursive.
9bdb763... HEAD@{6}: commit: Remove weevils
8518f9d... HEAD@{7}: checkout: moving from wickedfeature to master

Эти строки можно разбить на 4 части:

  • фиксирующий хэш,
  • указатель фиксации,
  • Экшен,
  • и дополнительная информация.

Если бы мы хотели вернуть коммит, который был утерян при HEAD@{1}, мы могли бы просто git reset --hard HEAD@{2}.
Теперь наша текущая ветка (и рабочая копия) переведены в состояние репозитория до того, как мы выполнили сброс.

Если бы мы просто хотели увидеть, что это за состояние, мы могли бы git checkout -b temp HEAD@{2} (или git checkout HEAD@{2} если у вас есть git 1.5.0 и выше).

Другие советы

Это проблема, которую я сражался со временем и снова.Свойство SpecialPermissions активности CreateTask не обновляет разрешения на уже существующую задачу.

Теоретически, вы должны быть в состоянии настроить событие OnTaskChanged для обнаружения переназначения и разрешения элемента задач на основе этого.У меня были результаты IFFY так хорошо.

Решение, которое я урегулировал на все мои рабочие процессы, заключался в том, чтобы реализовать приемник события ItemUpdated в списке задач, которые использует рабочий процесс.В этом ресивере события всякий раз, когда товар обновляется, вы можете проверить, изменено ли «назначенные для», и повторно разрешено соответствующим образом.

Редактировать: вот Снайп кода, который я использую.В моем случае переназначения могут быть в группе или конкретном пользователе, поэтому я обрабатываю обе ситуации.

// Compare the new string value of the 'Assigned To' field on the task to the old value
// in the event afterproperties. If they differ, this task has been reassigned.
if (!GenericUtilities.StringValueFromField(listItem["Assigned To"]).Equals(properties.AfterProperties["AssignedTo"]))
{
    // Break role inheritance if not already done
    if (!listItem.HasUniqueRoleAssignments)
    {
        // Reset inheritance first, to wipe out any other permissions
        listItem.ResetRoleInheritance();
        listItem.BreakRoleInheritance(false);
    }

    // Determine if the assigned user is a group or user, and assign permissions as necessary
    SPFieldUserValue field = new SPFieldUserValue(listItem.Web, GenericUtilities.StringValueFromField(listItem["Assigned To"]));
    if (field.User != null)
    {
        SetItemLevelPermissions(listItem.Web, listItem, field.User);
    }
    else
    {
        SPGroup assignedGroup = listItem.Web.SiteGroups[field.LookupValue];
        SetItemLevelPermissions(listItem.Web, listItem, assignedGroup);
    }
}
.

Метод SetItemLevelPermissions просто берет на себя генеракодицетагкод, который я пропускаю и предоставляю разрешения на задачу:

SPRoleDefinition roleDefinition = setSPWeb.RoleDefinitions["Contribute"];
SPRoleAssignment roleAssignment = new SPRoleAssignment(principal);
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
setListItem.RoleAssignments.Add(roleAssignment);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top