- 파일 상태 확인
- 파일은 Tracked(관리 중)와 Untracked(관리되지 않음)으로 나뉩니다. 파일의 상태를 확인하는 데에는 `git status` 명령어를 사용합니다. 초기에 저장소를 Clone 한 직후, 아무런 수정이 없는 상태에서 `git status` 명령어를 실행하면 아래와 같은 메시지를 확인할 수 있습니다.
$ git status On branch master nothing to commit, working tree clean // 위의 내용은 어떤 파일도 수정되지 않았음을 나타냅니다. // 현재 브랜치가 'master'이며, 서버의 'master' 브랜치와 동기화되어 있음을 알려주며, // 수정된 파일이 없는 상태를 나타냅니다.
- 파일은 Tracked(관리 중)와 Untracked(관리되지 않음)으로 나뉩니다. 파일의 상태를 확인하는 데에는 `git status` 명령어를 사용합니다. 초기에 저장소를 Clone 한 직후, 아무런 수정이 없는 상태에서 `git status` 명령어를 실행하면 아래와 같은 메시지를 확인할 수 있습니다.
- 새로운 파일을 만들어보기
- 프로젝트에 새로운 파일인 README를 만들어보겠습니다. 아래 명령어를 실행하면 README 파일이 생성되며, 그 후 `git status` 명령어를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
$ echo 'My Project' > README $ git status On branch master Your branch is up-to-date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) README nothing added to commit but untracked files present (use "git add" to track) //'Untracked files' 부분에 README 파일이 포함되어 있습니다. // 이는 README 파일이 아직 Git에서 추적되지 않은(Untracked) 상태임을 의미합니다. // 아직 이 파일이 스냅샷에 포함되지 않았기 때문에 커밋되지 않습니다.
- 프로젝트에 새로운 파일인 README를 만들어보겠습니다. 아래 명령어를 실행하면 README 파일이 생성되며, 그 후 `git status` 명령어를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
- 파일을 새로 추적하기
- `git add` 명령어를 사용하여 README 파일을 추적할 수 있습니다.
$ git add README
- 그 후 다시 `git status` 명령어를 실행하면 README 파일이 Tracked 상태이면서 Staged 상태로 표시되는 것을 확인할 수 있습니다.
$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: README
'Changes to be committed' 부분에 README 파일이 Staged 상태로 되어 있습니다. 이제 이 파일을 커밋하면 해당 커밋에서의 상태가 저장소 히스토리에 기록됩니다.
- `git add` 명령어를 사용하여 README 파일을 추적할 수 있습니다.
- Modified 상태의 파일을 Stage 하기
- 이미 Tracked 상태인 파일을 수정하고 Staged 상태로 변경하는 방법에 대해 알아봅시다. 이미 커밋한 CONTRIBUTING.md 파일을 수정한 후 `git status` 명령어를 실행하면 다음과 같은 결과를 볼 수 있습니다.
`CONTRIBUTING.md` 파일은 "Changes not staged for commit"에 있습니다. 이것은 파일이 Tracked 상태이지만 아직 Staged 상태가 아니라는 것입니다. 파일을 Staged 상태로 만들기 위해서는 `git add` 명령어를 실행해야 합니다.$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: README Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: CONTRIBUTING.md
-
그 후 `git status` 명령어를 다시 실행하면 아래와 같은 결과를 확인할 수 있습니다.$ git add CONTRIBUTING.md
-
이제 `CONTRIBUTING.md` 파일이 Staged 상태에 있어 다음 커밋에 포함될 것입니다. 하지만, 파일을 계속 수정해야 하는 상황이라면, 추가 수정 후에는 다시 `git add` 명령어를 실행하여 최신 버전을 Staged 상태로 만들어야 합니다.$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: README modified: CONTRIBUTING.md
- 이미 Tracked 상태인 파일을 수정하고 Staged 상태로 변경하는 방법에 대해 알아봅시다. 이미 커밋한 CONTRIBUTING.md 파일을 수정한 후 `git status` 명령어를 실행하면 다음과 같은 결과를 볼 수 있습니다.
- 파일 상태를 짤막하게 확인하기
- `git status` 명령으로 확인할 수 있는 내용이 많아 보일 때, 변경 내용을 간단하게 보여주는 옵션이 있습니다. `git status -s` 또는 `git status --short`와 같이 옵션을 주면 현재 변경 상태를 간략하게 보여줍니다.
$ git status -s M README MM Rakefile A lib/git.rb M lib/simplegit.rb ?? LICENSE.txt
- 위의 예시에서 볼 수 있듯이, 상태 정보 컬럼에는 두 가지 정보가 표시됩니다. 왼쪽에는 Staging Area에서의 상태를, 오른쪽에는 Working Tree에서의 상태를 나타냅니다.
- `??`: 아직 추적하지 않는(Untracked) 새 파일을 나타냅니다.
- `A`: Staged 상태로 추가된(Newly Added) 파일을 나타냅니다.
- `M`: 수정(Modified)된 파일을 나타냅니다. - 위의 예시에서 `README` 파일은 내용을 변경했지만 아직 Staged 상태로 추가되지 않았으므로 `M`이 표시되어 있습니다. `lib/simplegit.rb` 파일은 내용을 변경하고 Staged 상태로 추가한 상태이므로 왼쪽 M이 표시되었습니다. `Rakefile` 파일은 변경 후 Staged 상태로 추가하고 또 다시 내용을 변경하여 Staged와 Unstaged 상태가 함께 표시되어 있습니다.
- `git status` 명령으로 확인할 수 있는 내용이 많아 보일 때, 변경 내용을 간단하게 보여주는 옵션이 있습니다. `git status -s` 또는 `git status --short`와 같이 옵션을 주면 현재 변경 상태를 간략하게 보여줍니다.
- 파일 무시하기
- Git에서 관리할 필요가 없는 파일은 .gitignore 파일을 생성하여 무시할 수 있습니다. 보통 로그 파일이나 빌드 시스템이 자동으로 생성한 파일 등이 해당됩니다. 아래는 .gitignore 파일의 예시입니다.
-
$ cat .gitignore *.[oa] *~
- 첫 번째 라인은 확장자가 ".o" 나 ".a" 인 파일을 Git이 무시하도록 지시합니다.
두 번째 라인은 "~" 로 끝나는 모든 파일을 Git이 무시하도록 지시합니다. - 보통 텍스트 편집기의 임시 파일이나 빌드 과정에서 생성되는 파일들이 여기에 해당합니다. 추가로, .gitignore 파일에는 다양한 규칙이 적용됩니다.
- 아무것도 없는 라인이나, # 로 시작하는 라인은 무시합니다.
- 표준 Glob 패턴을 사용하며, 이는 프로젝트 전체에 적용됩니다.
- 슬래시(/)로 시작하면 하위 디렉토리에 적용되지 않습니다.
- 디렉토리는 슬래시(/)를 끝에 사용하여 표현합니다.
- 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않습니다.
-
# 확장자가 .a인 파일 무시 *.a # 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음 !lib.a # 현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음 /TODO # build/ 디렉토리에 있는 모든 파일은 무시 build/ # doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음 doc/*.txt # doc 디렉토리 아래의 모든 .pdf 파일을 무시 doc/**/*.pdf
- Staged와 Unstaged 상태의 변경 내용 보기
- 파일의 수정 내용을 자세히 살펴보려면 `git diff` 명령을 사용합니다. 이 명령은 워킹 디렉토리에 있는 것과 Staging Area에 있는 것을 비교하여 변경 내용을 보여줍니다.
-
$ git diff
- 이 명령은 워킹 디렉토리의 수정 내용을 보여줍니다.
-
$ git diff --staged # 또는 $ git diff --cached
- 이 명령은 Staging Area에 있는 파일의 수정 내용을 보여줍니다.
- 변경사항 커밋하기
- 수정한 파일들을 Staging Area에 추가합니다. 이를 위해 `git add` 명령을 사용합니다.
-
$ git add <파일1> <파일2> ... # 또는 모든 수정 파일을 한 번에 추가하려면 $ git add .
- Staging Area에 파일을 추가하면 해당 파일이 커밋에 포함될 준비가 된 상태입니다.
-
# Staging Area에 파일을 추가한 후, `git commit` 명령을 사용하여 커밋을 수행합니다. $ git commit
- 실행하면 커밋 메시지를 작성하는 편집기가 열립니다. 첫 번째 라인은 비어 있어서는 안되며, 나머지 라인은 변경된 파일 및 수정 내용이 표시됩니다.
- 메시지를 작성하고 저장한 후에 편집기를 종료하면 커밋이 완료됩니다.
- 또는 `-m` 옵션을 사용하여 커밋 메시지를 직접 명령어로 전달할 수 있습니다.
-
$ git commit -m "커밋 메시지"
- `git commit` 명령을 실행하면 Staging Area에 있는 파일들이 현재 브랜치에 새로운 커밋으로 저장됩니다.
- 커밋이 완료되면 해당 커밋의 체크섬과 변경된 파일의 통계가 표시됩니다.
- 커밋을 확인하려면 `git log` 명령을 사용합니다.
-
$ git log # 저장소의 커밋 기록을 출력합니다.
- Staging Area 생략하기
- Git에서 Staging Area를 건너뛰고 쉽게 커밋하는 방법은 `git commit` 명령에 `-a` 옵션을 추가하는 것입니다. 이 옵션을 사용하면 수정된 모든 Tracked 파일이 자동으로 Staging Area에 추가되어 커밋됩니다.
-
$ git commit -a -m '커밋 메시지'
- `-a` 옵션을 사용하면 `git add` 명령을 사용하지 않고도 모든 수정된 파일이 자동으로 Staging Area에 추가됩니다.
- 새롭게 생성된 파일들은 add를 해줘야됩니다.
- `-a` 옵션을 사용할 때는 변경된 파일 중에서 무엇이 Staging Area에 추가되고 커밋되는지 주의 깊게 확인해야 합니다.
- 파일 삭제하기
- Git에서 파일을 삭제하려면 `git rm` 명령을 사용합니다. 이 명령은 워킹 디렉토리에 있는 파일을 삭제하고 동시에 Staging Area에 이 변경 사항을 추가합니다. 삭제한 파일은 커밋을 통해 저장소에서도 삭제됩니다.
-
$ git rm PROJECTS.md
- 위 명령은 `PROJECTS.md` 파일을 삭제하고 해당 변경 사항을 Staging Area에 추가합니다. 이후 커밋을 통해 파일이 영구적으로 삭제됩니다.
-
$ git rm --cached README
- 위 명령은 `README` 파일을 Staging Area에서만 제거하고 워킹 디렉토리에는 그대로 남겨둡니다. 이는 Git이 해당 파일을 더 이상 추적하지 않도록 만들지만, 실제로 파일은 삭제하지 않습니다.
- Glob 패턴을 사용하여 삭제할 수 있습니다.
- 파일 이름 변경하기
- 파일 이름이 변경되었다는 별도의 정보를 저장하지 않습니다. 그러나 Git은 파일의 이름이 변경된 것을 스스로 추적할 수 있습니다. 파일 이름이 변경되면 Git은 파일 삭제와 추가를 함께 처리하여 이름이 변경된 것처럼 인식합니다.
-
$ git mv file_from file_to
- `git mv` 명령은 실제로는 단축 명령으로, `mv` 명령을 통해 파일 이름을 변경한 후 `git rm`과 `git add`를 수행하는 작업을 한 번에 처리합니다.
'GIT > GIT의 기초' 카테고리의 다른 글
[GIT] 태그 (1) | 2024.02.08 |
---|---|
[GIT] 리모트 저장소 (1) | 2024.02.07 |
[GIT] 되돌리기 (1) | 2024.02.07 |
[GIT] 커밋 히스토리 조회하기 (0) | 2024.02.07 |
[GIT] GIT 저장소 만들기 (0) | 2024.02.05 |