GIT
[GIT] Git add, commit, push 취소
무사뎀벨레
2021. 7. 16. 15:11
git add, git commit, git push를
취소하여야 할 경우가 있을때 대처 방법을 알아봅니다.
1. git add 취소하기
- 파일 상태를 Unstage로 변경합니다.
//모든 파일이 Staged 상태로 바뀜
$git add
//파일 상태 확인
$git status
On branch master
Changes to be commited:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README2.md
modified: TEST.md
- 현재 변경된 파일들이 Stage에 add된 상태입니다.
- git reset HEAD [file] 명령어를 통하여 git add를 취소할수 있습니다.
- [file]이 없다면 add한 파일 전체를 취소합니다.
//TEST.md 파일을 Unstage로 변경
$git reset HEAD TEST.md
Unstaged changes after reset:
M TEST.md
//파일 상태 확인
$git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README2.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: TEST.md
- 위처럼 git reset HEAD [file] 명령어를 통하여 TEST.md파일이 Unstaged 상태가 됩니다.
2. git commit 취소하기
- 예정보다 일찍 commit 한 경우
- 특정 파일을 빼먹고 commit 한 경우
//commit 목록 확인
$git status
//1. commit을 취소하고 해당 파일들을 staged 상태로 워킹 디렉토리에 위치시킴
$git reset --soft HEAD^
//2. commit을 취소하고 해당 파일들을 unstaged 상태로 워킹 디렉토리에 위치시킴
$git reset --mixed HEAD^ //기본 옵션
$git reset HEAD^ //위와 동일
$git reset HEAD~2 //최근 2개의 commit 취소
//3. commit을 취소하고 해당 파일들을 unstaged 상태로 워킹 디렉토리에서 삭제
$git reset --hard HEAD^
2-1. reset 옵션
- git reset 명령어는 옵션에따라 결과가 달라지니 주의하여 사용합니다.
- -soft : index 유지(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존
- -mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉토리의 파일 보존, 기본 옵션
- -hard : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉토리의 파일 삭제, 모두 취소
2-2. 워킹 디렉토리를 원격 저장소의 마지막 commit 상태로 되돌리고 싶을 경우
- 이 명령어를 사용할 때는 원격저장소의 마지막 commit 이후의 워킹 디렉토리와 add하였던 파일 모두 사라지므로 주의 필요
//워킹 디렉토리를 원격 저장소의 마지막 commit 상태로 되돌림
$git reset --hard HEAD
2-3. commit message 변경
$git add *
$git commit -m "커밋 메시지 1"
[master 90f53q7] 커밋 메시지 1
1 file changed, 0 insertions(+), 0 deletions(-)
create modw 100841 aaa
//방법 1. 커밋 메시지 수정(텍스트 편집기로 넘어감)
// vi 터미널에서 메시지 수정후 wq로 저장
$git commit --amend
//방법 2. 커밋 메시지 수정(텍스트 편집기로 넘어가지 않고 바로 메시지 수정)
$git commit --amend -m "커밋 메시지 1 수정"
3. git push 취소
- 이 명령어를 사용한다면 자신의 local의 내용을 remote에 강제로 덮어쓰기 하는것이므로 주의가 필요합니다.
- 되돌아간 commit 이후의 모든 commit 정보가 사라지기 때문에 주의가 필요합니다.
- 특히, 협업 프로젝트에서는 동기화 문제가 발생할 수 있으므로 팀원과 상의 후 진행하는것이 좋습니다.
-f 옵션 : -force 옵션과 동일
+[branch name] : 해당 branch를 강제로 push
//가장 최근의 commit을 취소, 기본 옵션 --mixed
$git reset HEAD^
//Reflog(브랜치와 HEAD가 지난 몇 달 동안에 가리켰던 커밋) 목록 확인
$git reflog 또는 $git log -g
//원하는 시점으로 워킹 디렉토리 되돌림
$git reset HEAD@{number} 또는 $git reset [commit id]
//되돌려진 상태에서 다시 commit
$git commit -m "커밋 메시지"
//원격 저장소에 강제 push
$git push origin [branch name] -f 또는 $git push origin +[branch name]
// Ex) master branch를 원격 저장소(origin)에 강제로 push
$ git push origin +master
3-1. untracked 파일 삭제
- git clean 명령어는 추적 중이지 않은 파일만 지우는게 기본, .gitignore에 명시한 무시되는 파일은 지우지 않습니다.
//디렉토리를 제외한 파일들만 삭제
$git clean -f
//디렉토리까지 삭제
$git clean -f -d
//무시된 파일까지 삭제
$git clean -f -d -x
3-2. option
- -d : 디렉터리까지 지우는 것
- -x : 무시된 파일까지 모두 지우는 것(.o 파일 같은 빌드 파일이 지워질 수 있으니 주의 필요)
- -n : 가상으로 실행 후 어떤 파일이 지워질지 알려줌
$git clean -n -d
Would remove build.TMP
Would remove tmp/
$git clean -n -d -x
Would remove build.TMP
Would remove test.o
Would remove tmp/
반응형