일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- intersection opserver
- postcss
- SCSS forward
- vue 지역 컴포넌트
- 리액트
- react next
- KDT 프로그래머스
- vuex map
- Spacer
- Vue
- vue 이벤트 수신
- KDT 프로그래머스 데브코스 프론트엔드
- flex
- 프로그래머스 데브코스
- SCSS import
- 리스트 렌더링
- nextjs사용법
- netlify redirect
- 이벤트 수식어
- SCSS use
- git 같은계정 다른 컴퓨터
- 프로그래머스 프론트엔드 데브코스
- vue mixin
- 프로그래머스 K_Digital Training
- 고양이 사진 검색기
- 쌓임맥락
- SCSS extend
- 프로그래머스 데브코스 프론트엔드
- 다른컴퓨터에서 git사용
- 폼 입력 바인딩
- Today
- Total
혼자 적어보는 노트
[Git] commit, reset 되돌리기 - reset / revert / conflict / reflog 본문
커밋 되돌리기 / reset revert
reset
지정한 커밋 이후의 커밋 내역 삭제
* 협업 시 reset 사용을 해야 할 경우 상의 후 진행하거나 revert를 사용
reset에는 세 가지 옵션이 있다.
--soft : 단순 커밋 내역만 삭제하고 현재 나의 파일 상태, add된 상태는 그대로 하고 싶을 때
--mixed : 커밋 내역과 add상태를 제거하고 현재 나의 파일 상태는 그대로하고 싶을 때 (Default)
--hard : 커밋 내역도 삭제하고 현재 나의 파일 상태도 지정한 커밋의 상태로 전부 돌아가고 싶을 때
옵션을 넣지 않으면 기본으로 mixed로 실행된다.
reset --hard
git reset --hard 커밋이름
// 커밋 이름은 전체를 입력해도 되고 앞자리 일부만 넣어도 된다.
git reset --hard 001706ae9fddff0408b69f4964527edba55a070a
git reset --hard 001706a
001706a의 커밋 이후의 모든 변경사항들이 reset되고
001706a의 파일 상태로 돌아간다.
git reset --hard
커밋이름을 생략하면 현재 위치의 커밋의 코드로 되돌아간다.
reset --soft
git reset --soft 커밋이름
001706a의 커밋 이후의 모든 변경사항들이 reset되고 파일상태는 그대로이다.
* 커밋을 잘못 했을 때 내역만 삭제할 때 사용하는 편
현재 commit의 바로 직전 커밋 삭제
git reset --soft HEAD~1
HEAD~뒤의 숫자로 현재 커밋 기준으로 몇개를 삭제할 지 지정할 수 있다.
첫 번째 commit 취소
git update-ref -d HEAD
git rm --cached -r .
revert
특정 커밋에 있는 수정 내용을 제외한 새로운 커밋 생성
$ git log --oneline -n 3
3945512 (HEAD -> main) Add gender
922fd26 Add age
daebe19 Add name
위처럼 name, age, gender 파일을 추가하고 각각 commit을 한 상태일 때
age를 삭제하고 싶다면
git revert 커밋이름
// 예시
git revert 922fd26
위의 명령어를 입력하고 에디터 창에서 커밋 메세지를 수정하고
에디터 창을 닫으면 새로운 커밋이 하나 생성되고 age파일이 삭제된다.
코드의 양이 많을 경우 유용하게 사용할 수 있다.
commit 없이 revert 하기
git revert --no-commit 커밋이름
revert한 상태가 현재 상태로 변경되며 추가 작업 후 따로 커밋 할 수 있다.
❗ 충돌 해결
$ git log --oneline -n 3
8aa98e7 (HEAD -> main) Modify age
589b9e9 Add age
daebe19 Add name
위처럼 name을 추가하고 age를 추가한 후 age파일을 변경 한 후에
age가 생성된 589b9e9에 revert를 하게되면 에러가 발생한다.
CONFLICT (modify/delete): age.txt deleted in parent of 589b9e9 (Add age) and modified in HEAD. Version HEAD of age.txt left in tree.
error: could not revert 589b9e9... Add age
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
589b9e9에서 생성된 age가 HEAD에 남아있기 때문에
충돌을 해결하려면 충돌이 나던 age 파일을 삭제해주면 된다.
git rm 파일경로 및 파일명
위의 명령어로 HEAD(현재위치)에서 파일을 삭제해주고
git revert --continue
revert을 다시 진행해주면 age파일이 삭제된 상태로 새로운 revert 커밋이 생성된다.
reflog를 이용하여 reset되돌리기
reflog
실수로 reset을 사용하여 커밋들이 삭제되었을 때
아래의 명령어를 입력하면 git으로 실행한 log들을 전부 확인해 볼 수 있다.
git reflog
λ git reflog
c32a1be (HEAD -> main) HEAD@{0}: reset: moving to c32a1be
2fbf95d HEAD@{1}: rebase (continue) (finish): returning to refs/heads/main
2fbf95d HEAD@{2}: commit: 회원가입 기능 추가
6fa1e39 HEAD@{3}: commit: 로그인 에러 수정
d43df8f HEAD@{4}: reset: moving to HEAD~
edb8915 HEAD@{5}: rebase: fast-forward
reset뿐만 아니라 rebase, commit등 실행한 내역들을 볼 수 있는데
해당 로그의 맨 앞의 코드를 이용하여 reset을 진행하면 해당 시점으로 돌아갈 수 있다.
git reset --hard [돌아갈 시점의 해시]
//예시
git reset --hard c32a1be
'기타' 카테고리의 다른 글
[Git] pull / push / fetch 다루기 + 충돌 해결 (0) | 2022.02.05 |
---|---|
[Git] 브랜치 다루기, 충돌 해결 / branch / merge / rebase (0) | 2022.02.04 |
[Git] Git의 공간 다루기 / commit / add / diff / stash (0) | 2022.02.03 |
[Git] 초기설정 / 저장소생성 / gitignore (0) | 2022.02.03 |
[VSCode] 기본 터미널 설정 (0) | 2022.02.03 |