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