본문 바로가기
GIT

[GIT] Git add, commit, push 취소

by 무사뎀벨레 2021. 7. 16.

 

 


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 명령어옵션에따라 결과가 달라지니 주의하여 사용합니다.
  1. -soft : index 유지(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존
  2. -mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉토리의 파일 보존, 기본 옵션
  3. -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/
반응형

'GIT' 카테고리의 다른 글

[GIT] git restore 를 이용한 staging area나 working directory 변화 취소  (0) 2022.01.07
[GIT] git 설치하기  (2) 2021.07.19
[GIT] git merge와 git rebase의 차이  (6) 2021.07.16
[GIT] Git 명령어  (2) 2021.07.16
[GIT] Git 이란?  (0) 2021.07.15

댓글