
Git 저장소를 쓰기 시작Git 저장소를 적용하는 방법Git 저장소를 Clone 하는 방법 Windows
$ cd <디렉토리경로>
.git 하위 디렉토리 생성$ git init
📌 다른 프로젝트에 참여하고 싶거나 Git 저장소를 복사하고 싶을 때
$ git clone <url>
Clone 하고 싶을 경우$ git clone <url> <새로운디렉토리이름>

$ git status
Untracked 파일은 아직 커밋에 넣어지지 않은 파일Tracked 상태가 되기 전까지는 Git은 절대 그 파일을 커밋하지 않는다.$ git add <파일명>
"Changes to be committed"에 들어 있는 파일은 Tracked 상태이면서 Staged 상태📌 이미 Tracked 상태인 파일을 수정한 경우
"Changes not staged for commit"에 존재
▶️ Tracked 상태이지만 아직 Staged 상태는 아님
Staged 상태로 만들려면 git add 실행
git add를 실행한 후 파일을 수정하면 Staged 상태이면서 동시에 Unstaged 상태로 나온다.
▶️ git add 명령을 다시 실행해서 최신 버전을 Staged 상태로 만들어야 한다.
$ git status -s
상태정보 컬럼
Staging Area에서의 상태Working Tree에서의 상태로그 파일이나 빌드 시스템이 자동으로 생성한 파일은 Git이 관리할 필요가 없다.
▶️ 이런 파일을 무시하려면 .gitignore 파일을 만들어서 그 안에 무시할 파일 패턴을 적는다.
자주 사용하는 예제
https://github.com/github/gitignore
📌 어떤 내용이 변경됐는지 살펴보고 싶을 경우
$ git diff
git diff는 Unstaged 상태인 것들만 보여준다.Staging Area에 넣었다면 아무것도 출력하지 않는다.$ git diff --cached
Staged 상태인 파일의 변경 사항 확인$ git commit
Staging Area에 속한 스냅샷을 커밋한다.Staging Area는 커밋할 파일을 정리한다는 점에서 매우 유용하지만 번거롭다.$ git commit -a
-a 옵션을 추가하면 Tracked 상태의 파일을 자동으로 Staging Area에 넣은 후 커밋한다.
남용할 경우 추가하지 말아야 할 변경사항도 추가될 수 있기 때문에 주의 깊게 사용해야 한다.
git rm 명령으로 Tracked 상태의 파일을 삭제한 후에 커밋해야 한다.워킹 디렉토리에 있는 파일도 삭제하기 때문에 실제 파일도 지워진다.📌 Git 명령을 사용하지 않고 단순하게 워킹 디렉토리에서 파일을 삭제한 경우
Unstaged 상태로 표시git rm을 실행하면 삭제한 파일은 Staged 상태가 된다.$ git rm <파일이름>
📌 Staging Area에서만 제거하고 워킹 디렉토리에 있는 파일은 그대로 남겨두고 싶을 경우
.gitignore 파일에 추가하는 것을 빼먹었거나 대용량 로그 파일이나 컴파일된 파일인 .a 파일 같은 것을 실수로 추가했을 때 사용$ git rm --cached <파일이름>
$ git mv <변경전> <변경후>
rm/add 명령을 실행해야 한다.$ git log
-p : 각 커밋의 diff 결과를 보여준다.$ git log -p
--stat : 각 커밋의 통계 정보 조회$ git log --stat
--pretty : 히스토리 내용 출력 형식 지정
oneline : 각 커밋을 한 라인으로 출력$ git log --pretty=oneline
format : 나만의 포맷으로 출력
| 옵션 | 설명 |
|---|---|
| %H | 커밋 해시 |
| %h | 짧은 길이 커밋 해시 |
| %T | 트리 해시 |
| %t | 짧은 길이 트리 해시 |
| %P | 부모 해시 |
| %p | 짧은 길이 부모 해시 |
| %an | 저자 이름 |
| %ae | 저자 메일 |
| %ad | 저자 시각 (형식은 –-date=옵션 참고) |
| %ar | 저자 상대적 시각 |
| %cn | 커미터 이름 |
| %ce | 커미터 메일 |
| %cd | 커미터 시각 |
| %cr | 커미터 상대적 시각 |
| %s | 요약 |
$ git log --pretty=format:"<포맷>"
--graph : 브랜치와 머지 히스토리를 보여주는 아스키 그래프 출력
▶️ 자주 쓰는 명령
$ git log --pretty=format:"%h %s" --graph
| 옵션 | 설명 |
|---|---|
| --since | 명시한 날짜 이후의 커밋만 검색한다. |
| --until | 명시한 날짜 이전의 커밋만 조회한다. |
| --author | 입력한 저자의 커밋만 보여준다. |
| --committer | 입력한 커미터의 커밋만 보여준다. |
| --grep | 커밋 메시지 안의 텍스트를 검색한다. |
| -S | 커밋 변경(추가/삭제) 내용 안의 텍스트를 검색한다. |
📌 완료한 커밋을 수정해야 할 때
너무 일찍 커밋했거나 어떤 파일을 빼먹었을 때 그리고 커밋 메시지를 잘못 적었을 때 한다.
다시 커밋하고 싶으면 파일 수정 작업을 하고 Staging Area에 추가한 다음 --amend 옵션을 사용하여 커밋을 재작성 할 수 있다.
$ git commit --amend
만약 마지막으로 커밋하고 나서 수정한 것이 없다면 커밋 메시지만 수정한다.
한 번 되돌리면 복구할 수 없기에 주의해야 한다.
git add *를 실행해 버렸다.git reset 명령으로 되돌릴 수 있다.$ git reset HEAD <파일명>
Staged 상태의 파일을 Unstaged 상태로 변경시킨다.$ git checkout -- <파일이름>
⚠️ 원래 파일로 덮어쓰기 때문에 수정한 내용은 전부 사라진다.
▶️ 그러므로, 수정한 내용이 정말 마음에 들지 않을 때만 사용하자!
$ git remote -v
$ git remote add <단축이름> <url>
$ git fetch <단축이름>
git fetch 명령은 리모트 저장소의 데이터를 모두 로컬로 가져오지만, 자동으로 Merge 하지 않는다.$ git pull <단축이름> <브랜치명>
git pull 명령은 리모트 저장소 브랜치에서 데이터를 가져올 뿐만 아니라 자동으로 로컬 브랜치와 Merge 시킬 수 있다.$ git push <단축이름> <브랜치명>
$ git remote show <단축이름>
$ git remote rename <변경전> <변경후>
$ git remote remove <단축이름>
$ git tag
GPG로 서명도 가능$ git tag -a <태그이름> -m "<메시지>"
git show 명령으로 태그 정보와 커밋 정보를 모두 확인 가능$ git show <태그이름>
$ git tag <태그이름>
git show 명령으로 태그 정보를 확인할 수 없다.$ git tag -a <태그이름> <커밋체크섬>
push 해야 한다.$ git push origin <태그이름>
push하고 싶을 경우--tags 옵션을 추가하여 리모트 서버에 없는 태그를 모두 전송$ git push origin --tags
clone하거나 pull하면 모든 태그 정보도 함께 전송detached HEAD 상태가 되며 일부 Git 관련 작업이 브랜치에서 작업하는 것과 다르게 동작할 수 있다.$ git checkout <태그이름>
detached HEAD 상태에서는 작업을 하고 커밋을 만들면, 태그는 그대로 있으나 새로운 커밋이 하나 쌓인 상태가 되고 새 커밋에 도달할 수 있는 방법이 따로 없게 된다.Git의 명령을 전부 입력하는 것이 귀찮다면 git config를 사용하여 각 명령의 Alias를 쉽게 만들 수 있다.
Alias 생성
$ git config --global alias.<별명> '기존명령'
Alias 목록 보기
$ git config --global --get-regexp alias