Главная страница
Навигация по странице:

  • Изменение последнего коммита

  • git commit

  • Отмена изменений файла

  • Просмотр меток

  • Создание меток

  • Аннотированные метки Создание аннотированной метки в gitе выполняется легко. Самый простой способ это указать -a

  • git tag

  • Легковесные метки

  • Выставление меток позже

  • Перемещение и удаление меток Для того чтобы переместить метку на другой коммит необходимо использовать опцию -f

  • -d

  • Практика. Практика 4_Удалённая. Отмена внесенных изменений. Работа с метками


    Скачать 23.26 Kb.
    НазваниеОтмена внесенных изменений. Работа с метками
    АнкорПрактика
    Дата27.09.2022
    Размер23.26 Kb.
    Формат файлаdocx
    Имя файлаПрактика 4_Удалённая.docx
    ТипПрактическая работа
    #699082

    Практическая работа №4 “Отмена изменений. Работа с метками”

    Тема: Отмена внесенных изменений. Работа с метками.

    Цель работы: научиться отменять сделанные изменения, работать с метками.

    Продолжительность: 2 часа.
    На любой стадии может возникнуть необходимость что-либо отменить. Рассмотрим несколько основных инструментов для отмены произведённых изменений. Необходимо помнить что не всегда можно отменить сами отмены. Это одно из немногих мест в git'е, где можно потерять выполненную работу если сделаете что-то неправильно.
    Изменение последнего коммита

    Одна из типичных отмен происходит тогда, когда коммит сделан слишком рано, например не были добавлены какие-либо файлы, или перепутан комментарий к коммиту. Если необходимо сделать этот коммит ещё раз, можно выполнить git commit с опцией --amend:

    $ git commit --amend
    Эта команда берёт индекс и использует его для коммита. Если после последнего коммита не было никаких изменений (например, приведенная команда была запущена сразу после предыдущего коммита), то состояние проекта будет абсолютно таким же и всё, что измениться, это комментарий к коммиту.

    Появится редактор для комментариев к коммитам, но уже с введённым комментарием к последнему коммиту. Здесь можно отредактировать это сообщение так же, как обычно, и оно перепишет предыдущее.

    Например, после совершения коммита, оказалось, что было забыто проиндексировать файл, который необходимо включить в данный коммит, необходимо выполнить подобную команду:

    $ git commit -m 'initial commit'

    $ git add forgotten_file

    $ git commit --amend
    Все три команды вместе дают один коммит — второй коммит заменяет результат первого.
    Отмена индексации файла

    Рассмотрим как переделать изменения в индексе и в рабочем каталоге. Приведём пример. Допустим, внесены изменения в два файла и необходимо записать их как два отдельных коммита, но случайно была выполнена команда git add * и проиндексировали оба файла. Как теперь отменить индексацию одного из двух файлов? Команда git status выводит подсказку для этого действия:

    $ git add .

    $ git status

    # On branch master

    # Changes to be committed:

    # (use "git reset HEAD ..." to unstage)

    #

    # modified: README.txt

    # modified: benchmarks.rb

    #
    Сразу после надписи “Changes to be committed”, написано использовать git reset HEAD <файл> для исключения из индекса. Выполним эту команду чтобы отменим индексацию файла benchmarks.rb:

    $ git reset HEAD benchmarks.rb

    benchmarks.rb: locally modified

    $ git status

    # On branch master

    # Changes to be committed:

    # (use "git reset HEAD ..." to unstage)

    #

    # modified: README.txt

    #

    # Changes not staged for commit:

    # (use "git add ..." to update what will be committed)

    # (use "git checkout -- ..." to discard changes in working directory)

    #

    # modified: benchmarks.rb

    #
    Теперь файл benchmarks.rb изменен, но не в индексе.
    Отмена изменений файла

    Если возникла ситуация, что нет необходимости оставлять изменения, внесённые в файл benchmarks.rb? Как быстро отменить изменения, вернуть то состояние, в котором он находился во время последнего коммита? Команда git status также выводит подсказку. В выводе для последнего примера, неиндексированная область выглядит следующим образом:

    # Changes not staged for commit:

    # (use "git add ..." to update what will be committed)

    # (use "git checkout -- ..." to discard changes in working directory)

    #

    # modified: benchmarks.rb

    #

    Выполним то что написано в подсказке:

    $ git checkout -- benchmarks.rb

    $ git status

    # On branch master

    # Changes to be committed:

    # (use "git reset HEAD ..." to unstage)

    #

    # modified: README.txt

    #
    Как видно, изменения были отменены. Необходимо понимать, что это опасная команда: все сделанные изменения в этом файле пропали — просто скопировали поверх него другой файл. Никогда не используйте эту команду, если не полностью уверены, что этот файл не нужен.

    Помните, всё, что является частью коммита в git'е, почти всегда может быть восстановлено. Даже коммиты, которые находятся на ветках, которые были удалены, и коммиты переписанные с помощью --amend могут быть восстановлены. Несмотря на это, всё, что никогда не попадало в коммит, скорее всего уже восстановить не получиться.
    Просмотр меток

    Как и большинство СКВ, git имеет возможность помечать (tag) определённые моменты в истории как важные. Как правило, этот функционал используется для отметки моментов выпуска версий (v1.0, и т.п.).

    Просмотр имеющихся меток (tag) в git'е делается просто. Достаточно набрать git tag:

    $ git tag

    v0.1

    v1.3
    Данная команда перечисляет метки в алфавитном порядке; порядок их появления не имеет значения.

    Для меток также можно осуществлять поиск по шаблону. Например, репозиторий git'а содержит более 240 меток. Если интересует просмотр только выпусков 1.4.2, можно выполнить следующее:

    $ git tag -l 'v1.4.2.*'

    v1.4.2.1

    v1.4.2.2

    v1.4.2.3

    v1.4.2.4


    Создание меток

    Git использует два основных типа меток: легковесные и аннотированные. Легковесная метка — это что-то весьма похожее на ветку, которая не меняется — это просто указатель на определённый коммит. А вот аннотированные метки хранятся в базе данных Git'а как полноценные объекты. Они имеют контрольную сумму, содержат имя поставившего метку, e-mail и дату, имеют комментарий и могут быть подписаны и проверены с помощью GNU Privacy Guard (GPG). Обычно рекомендуется создавать аннотированные метки, чтобы иметь всю перечисленную информацию; но если необходимо сделать временную метку или по какой-то причине нет необходимости сохранять остальную информацию, то для этого годятся и легковесные метки.
    Аннотированные метки

    Создание аннотированной метки в git'е выполняется легко. Самый простой способ это указать -a при выполнении команды git tag:

    $ git tag -a v1.4 -m 'my version 1.4'

    $ git tag

    v0.1

    v1.3

    v1.4
    Опция -m задаёт меточное сообщение, которое будет храниться вместе с меткой. Если не указать сообщение для аннотированной метки, git запустит редактор, чтоб ввести его.

    Можно посмотреть данные метки вместе с коммитом, который был помечен, с помощью команды git show:

    $ git show v1.4

    tag v1.4

    Tagger: Scott Chacon

    Date: Mon Feb 9 14:45:11 2009 -0800
    my version 1.4

    commit 15027957951b64cf874c3557a0f3547bd83b3ff6

    Merge: 4a447f7... a6b4c97…

    Author: Scott Chacon

    Date: Sun Feb 8 19:02:46 2009 -0800
    Merge branch 'experiment'
    Она показывает информацию о выставившем метку, дату отметки коммита и аннотирующее сообщение перед информацией о коммите.

    Легковесные метки

    Легковесная метка — это ещё один способ отметки коммитов. В сущности, это контрольная сумма коммита, сохранённая в файл — больше никакой информации не хранится. Для создания легковесной метки не передаются опций -a, -m:

    $ git tag v1.4-lw

    $ git tag

    v0.1

    v1.3

    v1.4

    v1.4-lw

    v1.5
    На этот раз при выполнении git show на этой метке не будет дополнительной информации. Команда просто покажет помеченный коммит:

    $ git show v1.4-lw

    commit 15027957951b64cf874c3557a0f3547bd83b3ff6

    Merge: 4a447f7... a6b4c97…

    Author: Scott Chacon

    Date: Sun Feb 8 19:02:46 2009 -0800
    Merge branch 'experiment'
    Выставление меток позже

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

    $ git log --pretty=oneline

    15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'

    a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support

    0d52aaab4479697da7686c15f77a3d64d9165190 one more thing

    6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'

    0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function

    4682c3261057305bdd616e23b64b0857d832627b added a todo file

    166ae0c4d3f420721acbb115cc33848dfcc2121a started write support

    9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile

    964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo

    8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
    Теперь предположим, что было забыто отметить версию проекта v1.2, которая была там, где находится коммит "updated rakefile". Можете добавить метку и позже. Для отметки коммита укажите его контрольную сумму (или её часть) в конце команды:

    $ git tag -a v1.2 -m 'version 1.2' 9fceb02
    Проверим, что коммит теперь отмечен:

    $ git tag

    v0.1

    v1.2

    v1.3

    v1.4

    v1.4-lw

    v1.5
    $ git show v1.2

    tag v1.2

    Tagger: Scott Chacon

    Date: Mon Feb 9 15:32:16 2009 -0800
    version 1.2

    commit 9fceb02d0ae598e95dc970b74767f19372d61af8

    Author: Magnus Chacon

    Date: Sun Apr 27 20:43:35 2008 -0700
    updated rakefile


    Перемещение и удаление меток

    Для того чтобы переместить метку на другой коммит необходимо использовать опцию -f:

    $ git tag -f v1.2 a6b4c97
    Для того чтобы удалить метку, необходимо указать опцию -d в команде git tag с названием метки:

    $ git tag -d v1.2
    Порядок выполнения практической работы

    1. Изучить теоретическую часть работы.

    2. Продолжить работу с созданным репозиторием.

    3. Создать три файла: 1.txt, 2.txt, 3.txt.

    4. Проиндексировать первый файл и сделать коммит с комментарием “add 1.txt file”.

    5. Проиндексировать второй и третий файлы.

    6. Удалить из индекса второй файл.

    7. Перезаписать уже сделанный коммит с новым комментарием “add 1.txt and 3.txt”

    8. Создать аннотированную метку с названием v0.01.

    9. Создать легковесную метку v0.01-lw указывающую на первый коммит в репозитории.

    10. Удалить метку v0.01.

    11. Создать скриншот, назвать его именем «ФИО_lab4.png» где ФИО это Ваши инициалы.

    12. Скриншот загрузить на Портал.


    написать администратору сайта