tools & libs/git

Eclipse에서의 Git 활용 - 4: history와 되돌리기

  • -

이력 확인

git에서 관리되고 있는 리소스의 버전을 확인하기 위해서는 [Window]-[Show View]-[Other]-[Team]-[History]를 이용한다.

history view

history view를 살펴보면 앞서 commit 했던 이력들이 표현되는 것을 볼 수 있다. (프로젝트를 선택했을 때와 개별 리소스를 선택했을 때의 화면이 다름을 주의하자.)

이력 정보에서 id는 commit id 나타낸다.

Message 항목은 3가지 정보가 섞여 있는데 [master]현재 사용 중인 branch를 의미한다. [HEAD]는 현재 사용 중인 브랜치의 최신 버전임을 나타낸다. 그리고 나머지는 commit 메시지이다.

앞서 했던 동작을 반복해서 다음과 같은 tree를 만들어보자.

package gittest;

public class Test {
    String first = "first";
    String second = "second";
    String third = "third";
}

 

command line

더보기

command line에서 위와 같은 로그를 보기 위해서는 git log --graph 명령을 사용한다. 또는 한 줄로 된 간략한 내용을 보려면 git log --oneline --decorate --all --graph 명령을 사용한다.

❯ git log --oneline --decorate --all --graph

* a96c357 (HEAD -> master) third
* 77221f4 second
* 7b5aa3f first
* e90bab6 first commit
* a4c5cce init

 

작업 되돌리기 1 - revert

작업을 하다보면 특정 버전으로 되돌아가야 할 필요가 발생한다. 새롭게 추가한 작업이 아예 망한 경우라고 볼 수 있다. 이때는 reset과 revert를 사용할 수 있다.

먼저 revert는 Git의 특정 커밋을 취소하고 그 취소 내역을 새로운 커밋으로 기록하는 명령어이다. 이를 통해 이전 커밋의 변경사항을 롤백 시켜서 이전의 상태로 되돌릴 수 있다.

예를 들어 현재 "third"를 추가 후 commit 했던 내용이 잘못됨을 발견하고 롤백 시키려면 third commit을 revert 시키면 된다. 이 내용은 자동으로 rollback의 결과를 새로운 commit으로 만들어주고 코드는 first와 second만 남아 있을 것이다.

public class Test {
  public static void main(String[] args) {
    String first = "first"; 
    String second = "second";
  }
}

다시 second commit을 revert 시키면 결과는 다음과 같다.

public class Test {
  public static void main(String[] args) {
    String first = "first"; 
  }
}

위 보기와 같이 revert를 하면 매번 새로운 commit이 생성되서 되돌리기 이력이 유지된다.

 

command line

더보기

command line에서 revert를 위해서는 git revert <commit_id>를 사용한다.

git revert 7b5aa3f  

Revert "first"

This reverts commit 7b5aa3fe320170a042b16e0f1a88bb740d606cd4.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Changes to be committed:
#       modified:   src/gittest/Test.java

 

작업 되돌리기 2 - reset

reset은 revert와 마찬가지로 작업을 되돌리는 역할을 한다. 차이점은 특정 commit을 롤백시키는 것이 아니라 특정 버전으로 만들어버린다.

reset은 hard, mixed, soft 3단계로 모드를 지정할 수 있다.

mode Working Tree Staging Area Repository
hard 되돌림 되돌림 되돌림
mixed(default) 유지 되돌림(unstaged로 변경) 되돌림
soft 유지 유지 되돌림

third에 해당하는 commit을 오른클릭 해서 hard 모드로 reset 해보자.

작업의 결과 third 이후의 작업들은 모두 없어진 것을 확인할 수 있다.

hard 모드이므로 Test.java는 third에서 commit 했던 내용을 가지고 있다.

package gittest;

public class Test {
    String first = "first";
    String second = "second";
    String third = "third";
}

작업 결과 트리를 살펴보면 revert가 작업의 이력을 유지하는 반면 reset은 작업 내역을 완전히 삭제해 버린다. 결과로 history가 깔끔하게 관리되지만 git이 작업의 이력 관리가 목적이라는 점에서 고민이 필요하다.

 

command line

더보기

command line에서 reset를 위해서는 git reset <commit_id> --mode를 사용한다.

❯ git reset 77221f4 --hard
HEAD is now at 77221f4 second

현재 수정된 내용을 HEAD 버전으로 변경할 때는 commit_id 대신 HEAD를 사용한다.

❯ git reset --hard HEAD
HEAD is now at 77221f4 second

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.