반응형

 

[Git] SourceTree, cli Git 커밋 되돌리기

 


 

커밋을 되돌리는 방법 3가지

 

1. reset

2. 브랜치 생성

3. revert

 


 

1. reset을 이용하여 되돌리는 법

reset은 기본적으로 커밋 기록을 전부 없앤다.

파일의 변경 사항 유지는 사용자가 선택할 수 있다.

 

 

commit 2 로 돌아가기 위해 "이 커밋까지 현재 브랜치를 초기화"를 선택한다.

 

 

 

 

원하는 option을 선택

 

reset option 3가지

soft - 커밋 없애고, 파일 변경 사항은 유지 (add 이후 상태)

mixed - 커밋 없애고, 파일 변경 사항은 유지 (add 이전 상태)

hard - 커밋 없애고, 파일 변경 사항도 전부 없앤다.

 

 

1 - 2. 원격 저장소 브랜치가 있을 경우

 

원격 저장소 브랜치는 commit 4에 있으므로 commit 2의 내용으로 다시 push 해야한다.

 

 

 

 

Sourcetree가 강제push를 지원하지 않으므로 터미널에서 git push --force를 입력한다.

 

 

 

 

원격 저장소까지 commit 2 로 성공적으로 되돌아갔다.

reset --hard는 이후 커밋들이 전부 지워지므로 그다지 추천하는 방법은 아니지만 혼자 작업한다면 유용하다.

 

 

cli 명령어

$git reset --hard 커밋해시값

$git push -f  [원격저장소명칭]  [원격브랜치]

 


 

hard로 인해 지워진 commit을 되돌리는 방법

 

$git reflog 를 입력하면 이전까지 모든 내역들이 나온다.

해시값을 선택해서 

$git reset --hard [되돌릴 해시값]

reset --hard를 진행했어도 되돌릴 수 있다.

 


 

2. 브랜치를 생성하여 되돌리는 법

 

commit 2에 해당되는 곳의 내용으로 되돌아 가려고 한다.

commit 2에 새로운 브랜치를 생성하고, 파일 내용을 변경하여 commit을 수행한다.

 

 

 

 

 

commit2의 commit 완료하고, main 브랜치와 병합하려고 하면 충돌이 발생한다.

 

 

 

 

 

원하는 파일내용으로 충돌을 해결해 준 후 commit을 한다.

 

 

 

 

 

commit 2의 내용으로 성공적으로 병합을 완료하였다.

 

newBranch에서 main을 병합했지만,

main에서 newBranch를 병합하는 작업도 HEAD만 옮겨주면 같은 방식으로 할 수 있다.

 

 

cli 명령어

$git checkout -b [생성할브랜치명] [커밋해시값]

$git merge main

 

 

 


 

3. revert를 이용하여 되돌리는 법

revert는 되돌릴 때마다 새로운 커밋을 생성한다.

커밋을 없애는 것보다 생성하는 것이 안전하기 때문에 협업시 사용한다.

 

 

3-1. 순차적으로 되돌리기

 

 

commit3을 사용하기 위해 "커밋 되돌리기"를 선택한다.

 

 

 

 

새로운 커밋이 생성되며 commit3의 내용으로 돌아갔다.

 

 

 

 

이번엔 commit3 을 커밋 되돌리기하여 commit2의 내용을 사용하려한다.

커서를 이전과는 다르게 자신의 위치에서 커밋 되돌리기를 수행하지 않고 그 아래 커밋에서 커밋 되돌리기를 선택한다.

 

 

 

 

commit2의 내용으로 변경되어 커밋되었다.revert를 수행하면 커밋이 되고,

이전 커밋내역이 지워진다.

순서는 위에서부터 순차적으로 되돌리길 원하는 커밋내역까지 되돌려줄 수 있다.

 

 


 

3-2. 커밋 내역을 골라서 취소하고 싶을 때

 

commit 2를 취소하고 싶은 경우 commit2 를 revert(커밋 되돌리기) 하여 충돌을 해결하고 커밋해주면 된다.

중간 부분 내역만 사라지고 그 이후는 유지된다.

 

cli 명령어

$git revert [취소할커밋값]

$git revert head~N  (N번째가 취소되는 커밋)

 


 

 

 


restore

 

add 실수 시 unstaging file 만들기

git restore --staged 파일명

 

수정 사항 원본으로 되돌리기

git restore 파일명

 

일부 파일만 이전 커밋으로 되돌리기

git restore --source head~N 파일명

반응형

' > Git' 카테고리의 다른 글

[Git] 기본 사용법 및 명령어  (0) 2022.07.26
[Git] Git rebase 재배치 사용법  (0) 2022.07.26
[Git] Sourcetree stash 스태시 사용법  (0) 2022.04.06
Github를 이용하여 웹 호스팅하기  (0) 2021.01.07

+ Recent posts