Руководство по Git. Исправление ошибок.

Во время разработки программного обеспечения (далее – ПО) всегда допускаются ошибки. С этой целью, во всех серьёзных системах контроля версий (далее – СКВ) предусмотрен удобный механизм исправления этих ошибок. Git не является исключением из этого правила и предусматривает специальный механизм для отмены изменений, которые были сделаны в локальном репозитории.

Предположим, что мы внесли некоторые изменения в наш проект и хотим их отменить. Для этого мы можем использовать операцию checkout.


Отмена неподтверждённых изменений

Предположим, что мы внесли некоторые изменения в наш файл Developer.java и хотим их отменить.

Вот изначальный файл:

Developer.java


package net.proselyte.gittutorial.company;

/**
 * Simple JavaBean domain object that represents a Developer.
 *
 * @author Eugene Suleimanov
 * @version 1.0
 */

public class Developer {
    private String firstName;
    private String lastName;
    private String specialty;
    private Integer salary;
    private Team team;

    public Developer() {
    }

    public Developer(String firstName, String lastName, String specialty, Integer salary) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.specialty = specialty;
        this.salary = salary;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getSpecialty() {
        return specialty;
    }

    public void setSpecialty(String specialty) {
        this.specialty = specialty;
    }

    public Integer getSalary() {
        return salary;
    }

    public void setSalary(Integer salary) {
        this.salary = salary;
    }

    public Team getTeam() {
        return team;
    }

    public void setTeam(Team team) {
        this.team = team;
    }

    @Override
    public String toString() {
        return "First Name: " + firstName +
                "\nLast Name: " + lastName +
                "\nSpecialty: " + specialty +
                "\nSalary: " + salary +
                "\nTeam: " + team.getTeamName();
    }
}

Ошибочно мы удалили метод toString():

Developer.java


package net.proselyte.gittutorial.company;

/**
 * Simple JavaBean domain object that represents a Developer.
 *
 * @author Eugene Suleimanov
 * @version 1.0
 */

public class Developer {
    private String firstName;
    private String lastName;
    private String specialty;
    private Integer salary;
    private Team team;

    public Developer() {
    }

    public Developer(String firstName, String lastName, String specialty, Integer salary) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.specialty = specialty;
        this.salary = salary;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getSpecialty() {
        return specialty;
    }

    public void setSpecialty(String specialty) {
        this.specialty = specialty;
    }

    public Integer getSalary() {
        return salary;
    }

    public void setSalary(Integer salary) {
        this.salary = salary;
    }

    public Team getTeam() {
        return team;
    }

    public void setTeam(Team team) {
        this.team = team;
    }
}

Проверим статус Git:


git status -s
 M src/net/proselyte/gittutorial/company/Developer.java

Теперь просто выполняем следующую команду:


 git checkout src/net/proselyte/gittutorial/company/Developer.java

И проверяем статус локального репозитория:


git status 
On branch master
nothing to commit, working directory clean

Данная команда может быть использована и для восстановления удалённых файлов, удаление который ещё не было подтверждено.
Предположим, что мы ошибочно удалили файл Developer.java


rm src/net/proselyte/gittutorial/company/Developer.java

gitRevertChangesStructure

Проверим статус проекта:


 git status 
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        deleted:    src/net/proselyte/gittutorial/company/Developer.java

Для того, чтобы отменить удаление файла воспользуемся следующей командой:


 git checkout src/net/proselyte/gittutorial/company/Developer.java

Проверяем статус проекта:


git status 
On branch master
nothing to commit, working directory clean

Структура проекта выглядит следующим образом:

gitRevertRemovingStructure

 


Отмена  изменений добавленных в плацдарм (Staging Area)

Предположим, что после удаления файла Developer.java мы выполнили команду add.

Проверим статус локального репозитория:


On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)
        deleted:    src/net/proselyte/gittutorial/company/Developer.java

Для того, чтобы восстановить данный файл нам необходимо выполнить следующую команду:


git checkout HEAD -- src/net/proselyte/gittutorial/company/Developer.java

Проверим статус репозитория:


 git status 
On branch master
nothing to commit, working directory clean


Удаление данных из плацдарма (Staging Area)

Для того чтобы удалить все данные, которые находятся в плацдарме (добавлены с помощью команды git add), нам необходимо выполнить следующую операцию:


git reset --hard 
HEAD is now at 578fe2e Style changes

На этом мы заканчиваем изучение процесса отмены изменений.
В следующей статье мы рассмотрим теги (tags).