'git status' 입력 시 현재 상황
add: 버전으로 만들 준비하기
commit: 버전 만들기
git add .
'.'은 '해당 폴더(git-practice) 안의 모든 것'이라는 뜻임
Changes to be commited: 버전으로 만들 준비가 되었다는 뜻이다.
git add tigers.yaml
참고) commit 전에 add가 존재하는 이유(내가 생각한 이유)
.gitignore가 아닌 tigers.yaml, lions.yaml만 커밋하고 싶다('git add .'가 아닌 'git add 파일명'를 입력해야 함). 그런데, 만약, commit 전에 add가 없다면, 둘만 커밋할 수가 없다. add는 commit하기 전에, commit할 것들을 모으는 작업이라고 생각하면 될 것 같다.
git commit -m "FIRST COMMIT"
▶ git commit: 커밋하기
▶ -m "FIRST COMMIT": 커밋할 때, 메시지 주기
'FIRST COMMIT': 통상적으로 프로젝트의 첫 버전을 만들 때 쓰이는 메시지
▶ 커밋 메시지는 "" 또는 ''를 사용해서 작성하면 되고, 해당 버전에서 무엇을 했는지를 작성해주면 된다.
▶ CLI
git log
모든 커밋은 d65660... 같은 고유의 문자열을 가진다.
▶ GUI(소스트리)
git commit -am "커밋 메시지"
단, 새로 추가된 파일(untracked 파일)이 없을 때에만 가능하다.
버전2를 만들어보자. 변경 사항은 다음과 같다.
1. lions.yaml 삭제
2. tigers.yaml의 manager를 Donald로 변경
3. leopards.yaml 추가
git status
git diff로 좀 더 자세하게 보기
git이 관리하는 파일(lions.yaml, tigers.yaml)에 대해, 변경 사항을 자세하게 보여준다.
커밋하기(버전2 만들기)
git add .
git commit -m "Replace Lions with Leopards"
Reset: 과거 버전으로 돌아간 다음, 이후 버전들은 모두 히스토리에서 제거한다.
Revert: 특정 과거 버전에서 수행했던 모든 것들을 전부 반대로 수행한 커밋이 새로 하나 생성된다.
언제 Revert를 하는가?
현재 커밋 히스토리는 아래와 같다.
git reset --hard 커밋해시
해당 커밋으로 돌아가고, 이후의 모든 커밋들이 히스토리에서 제거된다.
참고로, 커밋해시는 'git log' 명령어를 수행함으로써 알 수 있다.
EX1)
git reset --hard da80e8692e23c0f52b5f4d64ca3a9ab4924019d0
EX2)
git reset --hard d65660cedb6189ea026e2d3c84ecfbda0c9c9956
'FIRST COMMIT' 이후의 커밋들이 전부 사라진 것을 볼 수 있다.
git reset 커밋해시
Reset은 되돌아갈 커밋의 해시를 구했지만, Revert는 취소할 커밋의 해시를 구해야 한다.
EX1)
git revert 3bb0ad51d1aababe79ff37d139ebd31c955d0421
'Add George To Tigers' 커밋에서 수행했던 것들을 전부 반대로 수행한 커밋 하나가 새로 생성된다.
이 커밋에서는, tigers.yaml의 members에 'George'를 추가했다. then, 커밋5에 대해, 이를 반대로 수행한(tigers.yaml의 members에서 'George'를 제거한) 커밋이 새로 1개 생성된다.
EX2)
git revert c57e3e9bdc60678a8cfc74b098b40184010c46a8
커밋5에서 leopards.yaml을 수정한 것, 커밋7에서 leopards.yaml을 삭제하려고 하는 것이 충돌을 일으킨다.
conflict 상황을 해결한 후에, 'git revert --continue' 명령어를 입력한다.
EX2에서는, leopareds.yaml을 삭제하는 것으로 결정하겠다.
git rm leopards.yaml
git revert --continue
참고) Revert할 때 conflict가 발생하는 상황에 대해서,
git revert --no-commit 커밋해시
revert + 다른 작업도 함께 커밋하고 싶을 때
버전6를 만들어보자. 변경 사항은 다음과 같다.
1. leopards.yaml 삭제
2. .gitignore에 *.config 추가
3. hello.txt 추가(내용: hello)
버전으로 만들 준비하기
해당 파일을 '스테이지에 올라간 파일'에 추가한다.
('+', '선택 내용 스테이지에 올리기', '모두 스테이지에 올리기' 버튼 클릭)
버전 만들기(= 커밋 만들기)
좌측 상단 '커밋' > 커밋 메시지 입력 > 우측 하단 '커밋'
커밋3에서 수행한 것(tigers.yaml의 members에 George 추가)을 전부 반대로 수행한(tigers.yaml의 members에서 George 제거) 커밋이 새로 1개 생성되었다.
Reset 통해 과거 버전으로 돌아가기
해당 커밋 우클릭 > '이 커밋까지 현재 브랜치를 초기화' > '사용 중인 모드'를 'Hard'로 선택 후 '확인'
Revert 시 발생한 Conflict를 해결하기
커밋2에 대해 Revert한 결과, Conflict가 발생했다.
leopards.yaml 파일을 삭제하는 방향으로 conflict를 해결하려고 한다.
아래와 같이 leopards.yaml에 '-' 표시가 된 것을 볼 수 있다.