Во время разработки программного обеспечения (далее – ПО) всегда допускаются ошибки. С этой целью, во всех серьёзных системах контроля версий (далее – СКВ) предусмотрен удобный механизм исправления этих ошибок. 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
Проверим статус проекта:
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
Структура проекта выглядит следующим образом:
Отмена изменений добавленных в плацдарм (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).