작업을 하다 보면 git add로 추가를 깜빡할 경우가 생기는데 그럴 때, 파일을 추가적으로 포함시켜서 커밋을 만들고 싶다면
git commit --amend 명령어를 이용한다.
저번에 pull request를 이용해서 merge하는 작업을 진행했다.
merge작업은 이력이 남는 것이라 변경 사항에 있어야 하는데 온라인 사항에서만 했기 때문에 로컬에 업데이트를 해야해서 pull을 진행했다.
event브랜치를 만들고 event.txt파일을 만든 후 커밋
event.txt 내용을 변경하고 다시 커밋
commit --amend
commit에 특정 변경 사항을 추가하거나 직전 commit을 변경하고 싶을 때 사용하는 명령어이다.
소스트리에서도 확인가능
각 변경사항(커밋)을 대상으로도 체크아웃이 가능하다.
커밋으로 옮기는 방법은 특정 커밋의 해시값을 이용하면 된다.
(커밋의 해시값이란 커밋할 때 발생하는 특정 유니크 값)
git checkout (해시값)
이런 식으로
git reset
변경 이력을 되돌리는 방법
변경 이력이란 Staging Area(버전을 기록할 것들을 옮겨 놓는 장소)와 commit 둘 다를 의미
HEAD를 전 단계로 이동시키고
소스트리에서도 맞게 옮겨졌는지 확인해보고
아 혹시 필요하다면 3단계 전 이런식으로 단계별로 돌릴 수도 있다.
~ : 하나 뒤로 되돌아가겠다
~5 : 5개 뒤로 되돌아가겠다.
소스트리에서도 확인
event로 돌리고
add를 시킨 후 reset하면 그 전 단계로 돌아간다.
소스트리에서 봐보면 이력이 남아있는데
커밋 기록을 아에 없애버리려면
git reset HEAD~ --hard
이 명령어를 쓰면 된다.
HEAD는 현재 체크아웃된 커밋을 가르킨다. (현재 작업중인 커밋)
HEAD는 항상 작업트리의 가장 최근 커밋한 것을 가르키며
일반적으로는 branch의 이름을 가르키고 있다.
기록을 아에 지웠다.
소스트리에서 보면 아까와 달리 이력이 남아있지 않는 것을 볼 수 있다.
Staging에 올려 놓은 것을 되돌리고 싶으면 reset
커밋 자체를 되돌리고 싶으면 git reset HEAD~
변경 이력 자체를 날리고 싶다면 --hard를 붙인다.
이미 원격에 올라가 있는 것을 다른 사람이 가져가서 작업을 했다면, 혹은 작업을 하고 있다면 리셋을 할 수 있을까?
갑자기 원격에 있는 이력을 제거한다면 다른 사람들의 이력이 망가질 것이다.
따라서, 원격에 있는 커밋에 대해서는 git reset을 할 수 없다.
이를 대체할 수 있는 것이 git revert.
커밋을 지우는 게 아니라, 커밋을 취소하겠다는 것이다.
git revert
'돌아가고 싶은 상대경로'
git log를 봐보자
revert를 시키면 변경사항을 되돌린다.
(역으로 작업해서 되돌린다.)
소스트리에도 이렇게 뜬다.
git reset은 아예 이력을 없애버리는 거라서 이미 원격에 올렸을 경우에 사용하지 못한다.
git revert에는 이력을 되돌리는 이력을 남겨서 원격에 올렸을지라도 해당 이력을 올릴 수 있다.