$ git diff
$ git stash
그 후에 현재 소스폴더 확인하기: 수정내용을 임시저장하였으므로 수정내용이 나타나지 않아야함
$ git status
$ git stash pop
그 후에 현재 소스폴더 확인하기: 수정된 내용이 반영되어 있을 것임
$ git status
commit하기 전에 add까지 진행하여
commit할 준비를 했을 때 이를 취소하고 싶다면$ git reset
commit을 진행했는데 이를 삭제하고싶다면 이번에도 reset을 사용할 수 있다.
가장 최근에 진행한 commit을 삭제하고싶다면$ git reset --hard HEAD~1
여기서 HEAD~1은 가장 위에서 첫번째 내용을 삭제한다는 의미이다.
commit을 진행했는데 생각했던 것과 달라 다시 수정을 해야한다면
그 위에 다시 commit을 했을 때 commit로그가 불필요하게 쌓일 수 있다.
그래서 사용할 수 있는 방법이 commit을 더 늘리지 않으면서,
가장 최근에 작성한 commit을 수정하는 것이다.$ git commit --amend
명령을 실행하면 최근 commit을 수정할 수 있다.
만약 가장 최근이 아니라 과거에 진행된 커밋을 삭제하고 싶다면
rebase를 진행한 후에 위의 reset을 실행해주면 된다.
일단 먼저 어떤 commit이 진행된 후로 돌아갈 것인지 정해야한다.# 로그 확인하기 $ git log --oneline
이렇게 진행했다면 이때까지 진행된 commit이 순서대로 나올 것이다.
최근 commit부터 출력하므로 가장 위에 표시된 commit정보가 가장 최신이다.
여기서 이제 test: add hello_1.c hello_2.c hello_3.c 커밋을 작성한 직후로 되돌아가려면$ git rebase -i --root
를 입력하자. 그럼 아래 그림처럼 txt로 갈 것이다.
여기서 원하는 commit이 진행된 시점을 정하여 pick를 edit으로 바꾸고
저장을 해야한다. 여기서는 가장 위에 표시된 정보가 가장 오래된 정보이므로 헷갈리지 말자.
나는 위에서 두번째 commit을 진행한 시점으로 돌아가기위해 저 부분을 edit으로 바꾸고 저장했다.
그리고 나서 commit log를 확인해보니 두번째 커밋이 진행된 시점으로 돌아갔다.
이렇게 진행된 시점에서 새로운 commit을 넣으면 이 시점에 새로운 commit이 등록되고$ git rebase --continue
이 명령어를 수행하면 뒤에 나오는 commit들이 이어붙으면서 새로 만든commit 뒤에 기존에 있던 commit을 이어붙일 수 있다.
먼저 임의로 hello_4.c commit을 추가해보겠다.
여기서 'Add hello_4.c' commit을 'test: add hello1.c hello_2.c hello_3.c' commit에 합쳐보자.
우선 아래 명령어를 실행하여 Add hello_4.c 커밋을 삭제한다.# 먼저 가장 최근 커밋을 지우기 $ git reset --soft HEAD~1 # 그 다음은 amend을 통해 지워진 reset시킨 커밋내용 수정본에 넣기 # 이 때는 commit 제목도 바꿔주자! $ git commit --amend
(위에서 진행했던 reset --hard와 reset --soft가 다른 점은
hard는 커밋내용까지 모두 없애는 반면, soft는 커밋내용은 저장해두지만 커밋기록만 삭제하는 것이라서
reset을 진행 후 amend를 진행하면 지워진 커밋내용까지 수정본에 넣을 수 있다.)
amend를 진행하면서 commit제목에 hello_4.c까지 붙여주고
로그를 확인해보면 아래그림과 같이 나올 것이다.
이제 여기다가$ git rebase --continue
이렇게 입력해주면 뒤에 나오는 커밋들을 이어서 붙일 수 있다.
만약 rebase를 취소해야할 경우가 있다면
$ git rebase --abort
그래도 안된다면 처음으로 원상복구
# 여기서 origin은 확장자명, master는 branch명이다. $ git reset --hard origin/master