안녕하세요.
기계과 감성쟁이입니다.
어제에 이은 2탄입니다.
오늘 내용은 아래 영상을 많이 참고했습니다.
1. Git 과 VS Code 다운받기
위 링크에 들어가서,
깃을 다운로드 받습니다.
제가 주로 사용하기도 하고,
영상에서도 사용하는 VSC도 없다면 다운받아주세요.
2. Git 저장하기 - status, add, commit, log
폴더를 하나 만들어서
VSCode 워크스페이스에 넣어줍시다.
그리고 파일을 두개 생성할게요.
하나는 cat, 하나는 mouse 이고 각각 이름을 넣어줬습니다.
그런 다음 git init 이라는 명령어를 입력하니,
'Initialized empty Git repository in [경로]' 가 뜨네요.
폴더에 들어가보니 .git 이라는 폴더가 생성된 것을 확인할 수 있었습니다.
이번엔 git status 를 입력하니까
No commits yet 이라고 뜨고,
Untracked files : cat, mouse 라고 뜨네요.
commit은 변경사항을 기록하는 것을 말하고,
Untracked files 라는 말은 cat과 mouse 파일에 대한 변경사항을 기록하고 있지 않다는 말입니다.
이제 변경사항을 기록하고 싶으므로
git add -A 를 이용해서 파일을 모두 기록하기 시작합시다.
git add 는 변경사항을 임시로 저장하는 명령어이고,
-A 는 작업 중인 모든 파일들을 가리킵니다.
따라서, 작업중인 모든 파일의 변경사항을 임시로 저장한다는 말입니다.
완전히 저장하기 위해서 git commit -m "저장명" 을 입력하니
유저 정보를 입력하라는 말이 나오네요. 안내대로 넣어주고, 다시 입력합시다.
-m 은 '커밋 메시지'를 남기는 명령어인데,
변수명, 함수명, 클래스명처럼 협업을 할 때 규칙을 정해놓는게 좋습니다.
그리고 이 메시지를 조금 더 명확하고 자세히 하기 위해
템플릿도 이용할 수 있는데, 이건 다음에 포스팅할게요.
commit이 완료된 후 status 를 확인해보니
작업중인 것도, 저장할 것도 없다고 하네요.
cat 을 저장하고, mouse 를 삭제한 뒤, dog 와 chicken을 만든 후의 status 입니다.
이제 대충 느낌이 오시죠?
삭제, 수정 등의 모든 기록이 남습니다.
이건 git log 를 입력했을 때의 모습입니다.
바로 위 status 는 commit을 하지 않아서, 맨 처음 저장한 것만 기록이 남아있네요.
add 와 commit, log 를 입력했습니다.
두번째 커밋도 나오네요.
종합하면 이런 느낌이에요.
2. Git 되돌리기 - reset
이제 저장한 걸 가져오는 방법에 대해
알아봅시다.
파일을 과거로 되돌리는 방법은 reset과 revert 가 있습니다.
앞으로 설명할 것이지만, 위 링크에서 조금 더 쉽게 이해할 수 있을거에요.
첫번째로 reset 입니다.
1.
git reset --hard [돌아갈 시점의 커밋 ID]
만약 당신이 썸녀에게 고백했다가 대차게 까였다고 합시다.
그리고 집에 가서 '신이시여 저를 어제로 돌려주소서'라고 기도합니다.
여기서 만약 신이 git reset --hard 를 사용한다면,
당신은 아마 오늘을 기억 못하고 다시 고백을 하러 갈겁니다.
다시 말해, hard 를 이용해 과거로 돌아가면 그 시점 이후의 내용은 모두 사라집니다.
2.
git reset --soft [돌아갈 시점의 커밋 ID]
soft 리셋은 돌아간 시점 이후의 변경사항들을 모두 staged area 에 넣습니다.
위의 순서도를 참고하세요.
잘 이해하셨다면, 여기서 git commit 을 입력하면 다시 저장된다는 것을 이해하실거에요.
썸녀에게 차인 기억이 뇌리에 박히기 바로 직전이라고 할 수 있죠.
3.
git reset --mixed [돌아갈 시점의 커밋 ID] 또는 git reset [돌아갈 시점의 커밋ID]
mixed 리셋은 soft와 비슷하게 돌아간 시점 이후의 변경사항들을 남겨두지만
staged area가 아닌 unstaged area에 남겨둡니다.
그래서 add 와 commit, 두가지를 입력해야 다시 저장됩니다.
커밋 ID의 앞 6글자를 넣어서 사용합니다.
중요해요!!
chicken 은 사라지고, cat과 mouse에는 아무것도 남지 않았네요.
남지 않은 이유는 제가 첫번째 커밋 전에 저장을 하지 않아서 그렇습니다 하하...
Second Commit 은 사라지고, First Commit 만 남았습니다.
Soft 와 Mixed 같은 경우엔, 리셋 후 status 를 확인해보시면
staged 혹은 unstaged 에 변경사항들이 남아있습니다.
git reset --hard HEAD ~1
HEAD ~ (뒤로 몇번째) 를 통해 쉽게 이전으로 돌아갈 수도 있는데요,
1을 붙이면 바로 직전, 2를 붙이면 두번째 전으로 돌아갑니다.
3. Git 되돌리기 - revert
revert 는 특정 사건을 취소하는 명령어 같은 거에요.
그 사건을 완전히 상쇄시키는 새로운 시점을 만들어주죠.
썸녀에게 고백했다는 사실 그 자체를 없애버리고
오늘을 살아갈 수 있다는거에요.
이 상태를 'tom jerry bbq' 라는 메세지로 커밋하고,
chicken을 kyochon 으로 바꾼 뒤
'tom jerry kyochon'으로 커밋했습니다.
revert를 하고 나니
새로운 커밋메세지를 입력하라는 군요.
'after bbq' 라고 하려 했으나...
에디터를 만지면서 살짝 잘못되었긴 하지만
tom jerry bbq로 파일 상태가 돌아왔고, 이 상태로 새롭게 커밋이 저장되었습니다.
여태까지의 커밋들은 모두 나두고,
예전 커밋을 새로 가져오는거에요.
공부하면서 더더욱 편리한 시스템이라 생각 들었고,
역시 직접 해봐야 위대함을 느낄 수 있는 것 같아요.
다음에는 branch 에 대해서 포스팅해야겠네요