window 기반으로 기록한다.
1. Git 저장소 만들기
기존 디렉터리를 Git 저장소로 만들기
아래 명령어는 "폴더명" 위치로 가서 .git이라는 하위 디렉터리를 만든다.
cd 폴더명
git init
git이 파일을 관리하게 하려면 저장소에 파일을 추가하고 커밋해야 한다. git add 명령어로 파일을 추가하고 git commit으로 커밋한다.
git add 파일명
git commit -m '커밋메세지'
기존 저장소를 clone하기
git clone으로 저장소를 clone 한다.
이 명령은 주소에 있는 디렉터리 이름 혹은 (입력했다면) 다른 이름으로 저장소의 데이터를 모두 가져와서 자동으로 가장 최신 버전을 checkout 한다.
git clone 주소 [다른이름]
2. 수정하고 저장하기
워킹 디렉터리의 모든 파일은 크게 Tracked와 Untracked로 나눈다. Tracked파일은 Unmodified, Modified, Staged 상태 중 하나로, Git이 알고 있는 파일이다.
Untracked 파일은 워킹 디렉터리에 있는 파일 중 스냅샷, Staging Area 모두에 포함되지 않은 파일이다.
처음 저장소를 clone 하면 모든 파일은 tracked이면서 unmodified상태다. 가장 최근 상태를 받아온 뒤 아무것도 수정하지 않았기 때문이다.
파일의 상태 확인하기
git status 명령을 사용한다.
수정할 내용이 없다면 이런 메시지를 볼 수 있다.
만약 test.txt를 새로 만들었다면 이런 메시지가 나온다. untracked files에 test.txt가 들어있다.
파일 새로 추적하기 또는 수정하기
git add를 사용한다. 이 명령을 실행하면 git은 새 파일을 추적한다. git add 뒤에 파일 또는 디렉터리의 경로를 쓰면 되는데, 디렉터리를 쓴다면 아래에 있는 모든 파일까지 추가한다.
위의 test.txt를 add 했다.
다시 git status를 실행하면 다음 메시지가 나온다. test.txt가 tracked 상태이면서 커밋에 추가될 stated 상태라는 것을 확인할 수 있다.
git add 명령어로 수정한 파일을 staged 상태로 만들 수도 있다.
test.txt를 수정하고 git status 명령을 하면 다음 메시지가 뜬다. 여기서 다시 git add test.txt를 하면 수정된 내역이 반영된다.
파일 이름 변경하기
git mv 명령어를 사용한다. git mv 명령은 일종의 단축 명령어로 아래 명령어 세 줄을 수행한 것과 똑같다.
$ mv README.md README
$ git rm README.md
$ git add README
파일 무시하기
굳이 git이 관리할 필요 없는 파일은 .gitignore 파일을 만들고 그 안에 무시할 파일 패턴을 적는다. 주로 빌드 시스템이 자동으로 생성한 파일이나 로그 파일을 적는다.
gitignore 패턴은 이 규칙을 따른다.
- 아무것도 없는 라인이나, `#`로 시작하는 라인은 무시한다.
- 표준 Glob 패턴을 사용한다. 이는 프로젝트 전체에 적용된다.
- 슬래시(/)로 시작하면 하위 디렉터리에 적용되지 않는다.
- 디렉터리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.
- 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.
이 사이트를 이용하면 쉽게 .gitignore 파일을 만들 수 있다. https://www.toptal.com/developers/gitignore
Staged와 Unstaged 상태의 변경 내용 보기
git status 명령은 어떤 파일이 staged 상태인지만을 보여준다.
git diff 명령은 unstaged인 파일이 변경된 내역을 보여준다.
만약 staging area에 넣은 파일의 변경사항을 보고 싶다면 git diff --staged 옵션을 사용한다. --cached도 가능하다.
변경사항 커밋하기
git commit 명령어로 staging area에 있는 파일을 커밋할 수 있다.
git commit만 사용한다면 vim 편집기가 열리고 커밋 메시지를 작성할 수 있다.
git commit -m "메시지" 옵션을 사용하면 인라인으로 커밋 메시지를 첨부할 수도 있다.
만약 Staging Area를 생략하고(=git add 생략) Tracked 상태의 파일을 자동으로 staging area에 넣으면서 커밋하고 싶다면 git commit -a 옵션을 사용한다.
파일 삭제하기
git에서 파일을 제거하려면 git rm 명령으로 tracked 상태 파일 staging area에서 삭제한 후에 커밋해야 한다. 이 명령은 워킹 디렉터리에 있는 파일도 삭제하기 때문에 실제 파일도 지워진다.
git rm을 사용하지 않고 단순히 워킹 디렉터리에서만 파일을 삭제하고 git status를 사용한다면 파일이 unstaged 상태라고 표시해준다. 이다음 git rm 명령을 실행하면 삭제한 파일은 staged 상태가 된다. 마지막으로 git commit을 하면 파일은 삭제되고 git은 이 파일을 더는 추적하지 않는다.
git rm 파일명
만약 이미 파일을 수정했거나 staging area에 추가했다면 -f 옵션으로 강제로 삭제할 수 있다.
git rm -f 파일명
staging area에서만 제거하고 워킹 디렉터리에 있는 파일은 지우지 않고 남겨두려면 git rm --cached 옵션을 사용한다.
git rm --cached 파일명
여러 개의 파일이나 디렉터리를 한 번에 삭제하려면 file-glob 패턴을 사용할 수 있다.
아래 명령어는 log/ 디렉터리 및 .log 파일을 전부 삭제하고, ~로 끝나는 파일을 모두 삭제하는 명령어다. *앞에 \를 사용한 것을 기억해야 한다.
git rm log/\*.log
git rm \*~
3. 커밋 히스토리 조회하기
git log 명령을 사용한다. 원하는 히스토리를 검색할 수 있도록 git log 명령은 다양한 옵션을 제공한다.
-p, --patch | 각 커밋의 diff 결과를 보여준다. |
--stat | 각 커밋의 통계 정보를 조회한다. 어떤 파일이 수정됐는지, 얼마나 많은 파일이 변경됐는지, 얼마나 많은 라인을 추가하거나 삭제했는지 보여준다. 요약 정보는 가장 뒤쪽에 보여준다. |
--shortstat | --stat 명령의 결과 중에서 수정한 파일, 추가된 라인, 삭제된 라인만 보여준다. |
--name-status | 수정된 파일의 목록을 보여줄 뿐만 아니라 파일을 추가한 것인지, 수정한 것인지, 삭제한 것인지도 보여준다. |
--pretty | 히스토리 내용을 보여줄 때 기본 형식 외에 여러 가지 중 하나를 선택할 수 있다. --pretty=online : 각 커밋을 한 라인으로 보여준다. 많은 커밋을 한 번에 조회할 때 유용하다. --pretty=short | full | fuller : 각각은 정보를 조금씩 가감해서 보여준다. --pretty=format : 나만의 포맷으로 결과를 출력하고 싶을 때 사용한다. |
--graph | 브랜치와 머지 히스토리를 보여주는 아스키 그래프를 출력한다. --pretty=online 과 --pretty=format과 같이 쓰면 좋다. |
-n(숫자) | 최근 n개의 결과만 보여준다. |
--since | --after --until | --before |
시간을 기준으로 조회한다. 예) git log --since=2.weeks 는 지난 2주동안 만들어진 커밋만 조회한다. |
-S | 코드에서 추가되거나 제거된 내용 중에 특정 텍스트가 포함되어 있는지를 검색한다. |
--grep | 커밋 메시지 안의 텍스트를 검색한다. |
4. 되돌리기
git으로 커밋한 것은 언제나 복구할 수 있다. 하지만 커밋하지 않고 잃어버린 것은 절대로 되돌릴 수 없다.
커밋 되돌리기
git commit --amend 옵션을 사용해서 완료한 커밋을 수정할 수 있다.
아래 명령어를 순서대로 실행하면 커밋1 내용에 잊은 파일을 추가하고 메세지는 커밋2로 변경되어 하나의 커밋으로 기록된다.
git commit -m "커밋1"
git add 잊은파일
git commit --amend -m "커밋2"
파일 상태를 Unstaged로 변경하기
git reset 명령어를 사용해서 Staging Area에 있는 파일을 꺼낼 수 있다.
Modified 파일 되돌리기
수정된 파일을 최근 커밋된 버전으로 되돌리는 방법은 git checkout 명령어를 사용하는 것이다. 이 명령어는 원래파일로 덮어썼기 때문에 수정한 내용은 전부 사라진다. 수정 내용이 정말 마음에 들지 않을 때만 사용해야한다.
git checkout -- 파일명
'공부 > ELSE' 카테고리의 다른 글
[Unity] AR Foundation 개요 (0) | 2022.10.18 |
---|---|
Git 브랜치 (0) | 2022.06.28 |
Git (0) | 2022.06.26 |
[K-MOOC] 인공지능 시대의 사회적 쟁점 - Privacy (0) | 2022.05.08 |
댓글