Git 기초 - init, status, add, commit, log
Git에 대해 공부한 내용들을 복기하며 간략하게 기록한 것들입니다. 자세한 예시는 생략하고 명령어 위주로 정리하였습니다.
git init
깃 저장소를 만드는 명령.
프로젝트를 시작할 때 최초에 한 번만 수행하면 되는 초기화 작업입니다. 이 명령을 통해 .git 폴더가 생성되고, 그 안에 깃 저장소의 이력이 관리되기 시작합니다.
이 이야기는 .git 폴더를 지우면 그동안 관리된 이력이 사라진다는 이야기입니다. 그래서 기본적으로는 .git 폴더는 숨김 처리 되어있습니다.
git init 명령을 처음 실행하면, 그때부터 이력을 관리할 수 있습니다. 기본적으로 하위 폴더도 포함하여 관리합니다. 따라서, 하위 폴더마다 git init 명령을 따로 할 필요도 없고, 그렇게 하면 안된다고 경고하고 있습니다.
git status
현재 프로젝트의 git 상태를 알 수 있는 명령.
git 초기화를 하고 나서부터 현재 프로젝트의 git 상태를 알 수 있습니다. 추적되고 있는 파일과 그렇지 않은 파일, 커밋이 되었는지 안되었는지 등 현재 이력관리에 대한 상태를 알 수 있습니다.
git add
git add 명령은 위의 두 명령(git init, git status)와 달리 반드시 뒤에 붙어야하는 옵션들이 있습니다.
// 현재 폴더의 모든 내용
git add .
// 현재 프로젝트의 모든 내용
git add -A
// text.txt(특정파일)만 추가
git add text.txt
// text1.txt, text2.txt 추가하고 싶은 복수의 파일을 명시
git add text1.txt text2.text
git add는 어떤것들을 추가한다는 의미이기 때문입니다. 그래서 무엇을 추가해줄지 반드시 명시해주는게 필요합니다.
add 명령을 내리면, 이 파일들은 이제 commit 할 준비가 됩니다. 이 상태를 'stage에 올렸다' 라고 표현합니다. staged된 파일들만 커밋이 가능합니다.
add 명령은 한 번에 두가지 상태를 부여하는데 하나는 tracked, staged 입니다. track은 추적중이라는 의미이고, stage는 commit이 준비된 상태입니다.
상태가 두 가지인 이유가 있는데, 예를들어 add를 통해 추가된 파일을 수정하는 경우가 있습니다. 이렇게 되면 현재 그 파일의 상태는 tracking - 추적은 되고 있지만 staging -커밋될 준비는 안된 상태입니다. 상태가 staged된 파일만 커밋될 수 있습니다.
git commit -m "커밋 명령은 메세지가 필요합니다"
git commit 명령은 드디어 이력관리에 추가된 파일을 기록하는 명령입니다. 맡기다, 위탁하다, 약속하다 등의 의미가 있는 단어라는 점을 생각하면, 지금까지 추적하던 것들을 확정지어서 기록으로 남기겠다는 의미입니다.
예를 들어 지금까지는 급한대로 메모지에 적어놨던 것들인데, commit 명령을 통해 공식적으로 문서로 정리해놓겠다는 겁니다. 그래서 commit 메세지를 통해 어떤 점이 추가 혹은 수정되었는지 메세지로 남겨야합니다.
내가 현재 어떤 파일을 저장해도, 커밋이 자동으로 되진 않습니다.
파일을 저장하건 지우건, 삭제하건 이런 행위는 순전히 프로젝트 단위에서 봤을때 수많은 변화 중 하나입니다. 이런 것들을 지켜만 볼 뿐 자동으로 이력으로 남겨주진 않습니다.
git의 이력관리는 본인이 직접 중요하다고 생각되는 부분만 더하고(add), 기록으로 확정짓는(commit) 방식으로 이뤄집니다.
git commit -a -m "add와 commit을 동시에 수행"
-a 옵션을 주면, add (스테이징)하는 과정을 동시에 수행할 수 있습니다.
Commit - 커밋은 원자적(Atomic)하게 유지관리하는 것이 좋습니다.
한 번에 많은 내용을 담아서 커밋할 경우 곤란한 일이 생길 수 있습니다. 예를 들어 변경사항을 되돌릴 경우, 한 번에 많은 것을 다시 작성해야 할 수가 있기 때문입니다.
버그 발생할 확률도 커지고, 뜻하지 않게 많은 수고가 듭니다. 그래서 커밋은 작게 쪼개서 하나하나 의미있는 단위로 관리하는 것이 좋습니다.
git log
git log는 git status와 유사해보이는 명령인데, 그 동안 commit된 이력을 보여줍니다.