Восстановление работы после отсоединения головы с помощью: git checkout xxx <period> - PullRequest
0 голосов
/ 25 июня 2018

Я проверил свой предыдущий коммит git на https://stackoverflow.com/a/2007704/1032531. Обратите внимание, что в нем указано, что он включает .. Неужели я уже успел поработать над этим предметом? Как я могу вернуть изменения, которые я делал, прежде чем проверять эту другую ветку?

[michael@devserver autoapp]$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   public/index.php
        ..and about 40 other files

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        src/Lib/Helper.php

no changes added to commit (use "git add" and/or "git commit -a")

[michael@devserver autoapp]$ git log
commit 4037ec1702bd2fa6a5a15f7413f4ccccb59d356e (HEAD -> master)
Author: Michael Reed <michael@gmail.com>
... and lists the other commits but the one above was the latest one

[michael@devserver autoapp]$ git checkout 4037ec1702bd2fa6a5a15f7413f4ccccb59d356e .
[michael@devserver autoapp]$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        src/Lib/Helper.php

nothing added to commit but untracked files present (use "git add" to track)
[michael@devserver autoapp]$ git checkout master
Already on 'master'
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)
[michael@devserver autoapp]$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        src/Lib/Helper.php

nothing added to commit but untracked files present (use "git add" to track)
[michael@devserver autoapp]$ git diff
[michael@devserver autoapp]$ git checkout -
Already on 'master'
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

[michael@devserver autoapp]$

1 Ответ

0 голосов
/ 25 июня 2018

В команде

git checkout 4037ec1702bd2fa6a5a15f7413f4ccccb59d356e .

. является указателем пути.Предоставление спецификатора пути в корне меняет то, что делает checkout.

Без спецификатора пути checkout перемещает HEAD.Это означает, что он либо «проверяет» ветвь, либо «проверяет» фиксацию (которая может быть, а может и не являться вершиной ветви) в состоянии «отсоединенного HEAD».Если вы не укажете git в противном случае, он предупредит вас перед тем, как прекратить незафиксированные изменения (т. Е. Будет сопротивляться выполнению checkout).

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

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

Хотя git очень хорошо сохраняет изменения, которые были зафиксированы (или даже спрятаны)), если вы потеряете рабочие файлы, это не поможет.Если не считать решения для внешнего резервного копирования, боюсь, вам, возможно, придется начать все сначала.

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