그림을 그려서 넣고 싶은데 계속 손으로 만든 발그림이 나온다...ㅠㅠ
Android Studio가 지원하는 커밋 되돌리기 방법 3가지
1) 'Undo Commit...'
|
<들어가기에 앞서 봐야할 사항>
※ Undo, Rever, Reset 모두 로컬 커밋만 복원되므로 로컬 복원사항을 'Push하지 않는 이상' 원격 브랜치와 히스토리에는 변화없다.
※ 이미 원격에 Push한 커밋사항은 항상 Revert로 되돌려야 한다.
( ∵ Reset 적용 상태에선 push가 안되며 강제옵션있으나 위험함!!
다른 사람 작업환경이 꼬일 수도 있다 ㄷㄷ)
[↓ 하기 ⓑ' 적용 방법 공통 부분] : 모두 스튜디오 하단 툴에서 'Git' 선택 > 'Git'툴 상단에서 'Log: all' 선택 >
1) 'Undo Commit...' : 로컬 현 브랜치에서의 마지막 커밋사항을 되돌림
ⓐ 되돌릴 수 있는 범위 : '로컬 마지막 커밋사항(1개)'만 복원
ⓑ 적용 방법 : > 복원할 로컬 브랜치 마지막 커밋사항 선택 > 우측 마우스 선택 > 'Undo Commit...' 선택
ⓒ 복구 대상 : 로컬 현 브랜치에서의 마지막 커밋사항
(로컬 마지막 커밋사항이 원격 커밋과 같다면 원격커밋에서도 우측 마우스 선택하여 적용가능)
ⓓ [적용 후 변화]
- 로컬 브랜치 : (마지막 커밋사항이 로컬 히스토리에서 제거되어) 이전 커밋사항 가리킴
- 로컬 히스토리 : 마지막 커밋사항이 로컬 히스토리에서 제거
- Working direcotory : 커밋수정사항은 커밋 전 'Staged 상태'로 로컬 WorkTree에 존재 ('Local Changes'에 Changelist로 생성됨)
ⓔ 연관 Git 명령어 : 없음
2) 'Revert Commit'
: 선택한 커밋사항이 적용되기 전 상태를 만들고 이 상태를 로컬에 커밋까지함으로써 복원함
ⓐ 되돌릴 수 있는 범위 :
ㄴ> '로컬 커밋사항(1개)' 복원 가능
+) ★ Revert는 커밋을 1개씩만 복원하지만 만약 복원해야할 커밋이 많다면,
HEAD를 기준으로 몇 개의 커밋을 취소할지를 지정하거나 커밋의 범위를 지정하고
ex) $ git revert HEAD~3, $ git revert -n master~5..master~2
Revert 수 만큼 커밋이 생기는 것이 싫다면 [–no-commit 옵션]을 사용한다.
ㄴ> '원격 커밋사항'은 Revert실행으로 추가된 '로컬 복원 커밋사항'을 Push하는 경우 가능
+) ★ 로컬 브랜치의 '선택 커밋사항의 복원 커밋사항'을 push하면 원격까지 반영된다.
ⓑ 적용 방법 : > 복원할 커밋사항 선택 > 우측 마우스 선택 > 'Revert Commit'
ⓒ 복구 대상 : 선택한 커밋사항
ⓓ [적용 후 변화]
- 로컬 브랜치 : 추가된 '선택 커밋사항의 복원 커밋사항'을 가리킴
- 로컬 히스토리 : '선택 커밋사항' 후로 '선택 커밋사항의 복원 커밋사항'이 추가됨
- Working direcotory : 변경없음
ⓔ 연관 Git 명령어 : $ git revert <복원할 커밋사항 >
3) 'Reset Current Branch to Here'
: '선택한 커밋사항' 적용 시점의 상태(스냅샷)로 되돌림 (=선택 커밋 후 모든 커밋사항들을 되돌림)
ⓐ 되돌릴 수 있는 범위 : '로컬 커밋사항(복수)'은 항상 가능 / '원격 커밋사항'은 -f 옵션 사용 시 가능하나 ※ 위험하니 하지말것!!
ⓑ 적용 방법 : > 복원될 상태를 가진(=복원할 커밋의 이전) 커밋사항 선택 > 우측 마우스 선택
> 'Reset Current Branch to Here' > 'Git Reset' 팝업▼에서 [Reset 옵션 (4가지)] 선택 후 적용
[Reset 옵션 (4가지)]
1. Soft : 복원될 커밋들의 수정사항은 'Staged 상태'로 Working direcotory에 유지
('Local Changes'탭에 Changelist로 생성됨)
2. Mixed : 복원될 커밋들의 수정사항은 'UnStaged 상태'로 Working direcotory에 유지
('Local Changes'탭에 Changelist로 생성됨)
3. Hard : 복원될 커밋들의 수정사항도 Working direcotory에서 제거 & Working direcotory 변경 사항 모두 제거
(※로컬 소스코드 수정사항 손실되니 주의)
4. Keep : 복원될 커밋들의 수정사항도 Working direcotory에서 제거 & Working direcotory 변경 사항이 있는 경우
사용자에게 처리 여부 물어봄
ⓒ 복구 대상 : 선택한 커밋사항 이후의 모든 커밋사항들
ⓓ [적용 후 변화]
- 로컬 브랜치 : 로컬의 현 브랜치가 '선택한 커밋사항'을 가리키도록 수정됨
- 로컬 히스토리 : '선택한 커밋사항' 이후의 모든 커밋사항들이 제거됨
- Working direcotory : [Reset 옵션 (4가지)]별로 모두 다름
ⓔ 연관 Git 명령어 : $ git reset <옵션> <복원될 상태를 가진(=복원할 커밋의 이전) 커밋사항>
+) Reset 취소 Git 명령어 : $ git reflog명령으로 HEAD 변경 이력 조회 후
$ git reset명령어로 HEAD접근 해 reset을 취소 가능 (※ Reset hard모드했을 경우 복구 불가능)
END!
스터디 도움 참조 블로그 (References)
- What is the difference between “Revert Commit” and “Undo Commit” in IntelliJ IDEA? https://stackoverflow.com/a/59267614 - git reset vs revert https://www.devpools.kr/2017/02/05/%EC%B4%88%EB%B3%B4%EC%9A%A9-git-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0-reset-revert/ - git reset https://brownbears.tistory.com/477 - git Push 되돌리기 https://jupiny.com/2019/03/19/revert-commits-in-remote-repository/ - git reset vs revert https://donghoon-khan.github.io/devops/2020/08/18/git-rollback/ https://youngest-programming.tistory.com/220 - git reset : add 취소 / commit 취소하기 https://codevang.tistory.com/227 |