git add
1. 수정된 파일을 스테이징 영역에 추가하는 것
git add 명령어의 가장 기본적인 용도는 파일을 스테이징 영역(Index)에 추가하는 것입니다. 이는 수정된 파일이 다음 커밋에 포함되도록 준비하는 단계입니다. Git은 작업 디렉토리의 변경 사항을 커밋하기 전에 스테이징 영역에 추가해야 합니다.
git add modifiedfile.txt
이 명령어는 modifiedfile.txt 파일의 변경 사항을 스테이징 영역에 추가하여, 다음 커밋에 포함될 준비를 합니다.
2. 새로 생성된 파일을 버전 관리에 추가 (트랙 상태로 만드는 것=추적하라고 지시하는 것)
새로운 파일을 리포지토리에 추가할 때 git add 명령어를 사용하여 Git이 해당 파일을 추적하게 만듭니다. Git은 기본적으로 새로운 파일을 추적하지 않기 때문에, 새 파일을 추가할 때는 반드시 git add 명령어를 사용해야 합니다.
트랙 상태로 만드는 것 (추적하라고 지시하는 것)
git add newfile.txt
이 명령어는 새로 생성된 newfile.txt 파일을 추적하도록 Git에 지시합니다.
요약
git add 명령어는 Git에서 매우 중요한 역할을 하며, 주로 다음 두 가지 용도로 사용됩니다:
- 파일을 스테이징 영역에 추가: 변경 사항을 커밋하기 전에 파일을 준비하는 단계.
- 새로 생성된 파일을 버전 관리에 추가: Git이 새로운 파일을 추적하도록 함.
추가적으로, 디렉토리 전체, 특정 패턴의 파일, 또는 변경 사항의 일부를 스테이징 영역에 추가하는 다양한 옵션을 사용할 수 있습니다.
Committed, Modified, Staged
1. Modified
Modified 상태는 파일이 수정되었지만 아직 스테이징 영역이나 로컬 리포지토리에 추가되지 않은 상태를 의미합니다. 작업 디렉토리에서 파일을 수정하면 해당 파일은 Modified 상태가 됩니다.
2. Staged
Staged 상태는 수정된 파일이 커밋될 준비가 되었음을 의미합니다. git add 명령어를 사용하여 파일을 스테이징 영역에 추가하면 해당 파일은 Staged 상태가 됩니다. 이 상태에서는 파일이 아직 로컬 리포지토리에 커밋되지 않았지만, 다음 커밋에 포함될 준비가 된 것입니다.
3. Committed
Committed 상태는 파일이 로컬 리포지토리에 저장된 상태를 의미합니다. git commit 명령어를 사용하여 스테이징 영역에 있는 파일들을 커밋하면, 이 파일들은 로컬 리포지토리에 저장됩니다. 이 상태에서는 파일이 안전하게 로컬 리포지토리에 보관되며, 필요에 따라 원격 리포지토리에 푸시될 수 있습니다.
1. 파일 수정
작업 디렉토리에서 파일을 수정합니다.
echo "Hello, World!" > example.txt
2. 파일 스테이징
수정된 파일을 스테이징 영역에 추가합니다.
git add example.txt
3. 파일 커밋
스테이징 영역에 있는 파일들을 커밋하여 로컬 리포지토리에 저장합니다.
git commit -m "Add example.txt with Hello, World!"
git commit -m
커밋 메시지 작성
Git에서 각 커밋(변경 사항의 스냅샷)에 대한 설명을 제공하는 텍스트입니다. 커밋 메시지는 변경 내용의 목적이나 이유를 명확하게 설명하여, 나중에 커밋의 내용을 이해하고 추적하는 데 도움을 줍니다.
스냅샷(snapshot)
Git에서 커밋은 파일이 변경된 부분을 저장하는 스냅샷(snapshot)을 의미합니다. git add 명령어는 이러한 스냅샷을 만드는 과정에서 중요한 역할을 합니다.
요약
- 트랙 상태로 만드는 것: 새로운 파일을 Git이 추적하도록 지시.
- 수정된 파일을 스테이징 영역에 추가하는 것: 수정된 파일의 변경 사항을 스테이징 영역에 추가하여 커밋될 준비를 함.
이 과정을 통해 Git은 변경된 파일의 스냅샷을 생성하고, 커밋을 통해 해당 스냅샷을 로컬 리포지토리에 저장합니다. 이로써 프로젝트의 버전 이력을 관리하고 추적할 수 있습니다.
.gitignore
.gitignore 파일은 Git에서 특정 파일이나 디렉토리를 추적하지 않도록 지시하는 설정 파일입니다. 이 파일에 명시된 패턴에 맞는 파일들은 Git의 버전 관리에서 제외됩니다. 이는 개발 환경에서 불필요한 파일들이 Git 리포지토리에 포함되지 않도록 하기 위해 사용됩니다.
.gitignore 파일의 역할
- 불필요한 파일 제외:
- 컴파일된 바이너리 파일, 로그 파일, 임시 파일 등과 같은 불필요한 파일들이 리포지토리에 포함되지 않도록 합니다.
- 개발 환경 설정 파일 제외:
- 각 개발자의 환경 설정 파일이나 시스템에서 생성된 파일들을 제외하여, 리포지토리에 불필요한 정보가 포함되지 않도록 합니다.
- 보안 및 민감 정보 제외:
- API 키, 비밀번호, 개인 정보가 포함된 파일들을 제외하여, 보안 문제를 방지합니다.
.gitignore 파일의 작성법
.gitignore 파일은 각 줄에 하나의 패턴을 작성하여 무시할 파일이나 디렉토리를 지정합니다. 주요 패턴 규칙은 다음과 같습니다:
주석: #으로 시작하는 줄은 주석으로 간주됩니다.
# 이 파일은 로그 파일을 무시합니다
특정 파일 무시:
example.txt
특정 디렉토리 무시:
/build
확장자로 파일 무시:
*.log
*.tmp
특정 패턴 제외: !로 시작하는 패턴은 무시하지 않도록 지정합니다.
!important.log
하위 디렉토리 내 모든 파일 무시:
/logs/*
일반적인 .gitignore 파일의 예제
# 컴파일된 바이너리 파일 무시
*.class
*.exe
*.dll
# 로그 파일 무시
*.log
# 임시 파일 무시
*.tmp
*.swp
*.bak
# 시스템 파일 무시
.DS_Store
Thumbs.db
# IDE 관련 파일 무시
.vscode/
.idea/
# 빌드 디렉토리 무시
/build/
dist/
# 환경 설정 파일 무시
.env
# 특정 파일은 무시하지 않음
!.gitignore
.gitignore 파일 생성 및 사용
- .gitignore 파일 생성: 프로젝트 루트 디렉토리에 .gitignore 파일을 생성합니다.
- 패턴 추가: 무시할 파일과 디렉토리를 패턴에 맞게 작성합니다.
- Git에서 무시하기: .gitignore 파일이 포함된 상태로 Git에 커밋합니다.
git add .gitignore
git commit -m "Add .gitignore file"
1. .gitignore 파일 생성
먼저 프로젝트 루트 디렉토리에서 .gitignore 파일을 생성합니다.
touch .gitignore
2. .gitignore 파일에 패턴 추가
생성한 .gitignore 파일을 열어 무시할 파일과 디렉토리 패턴을 추가합니다. 예를 들어, 다음과 같은 내용을 추가할 수 있습니다:
# 컴파일된 바이너리 파일 무시
*.class
*.exe
*.dll
# 로그 파일 무시
*.log
# 임시 파일 무시
*.tmp
*.swp
*.bak
# 시스템 파일 무시
.DS_Store
Thumbs.db
# IDE 관련 파일 무시
.vscode/
.idea/
# 빌드 디렉토리 무시
/build/
dist/
# 환경 설정 파일 무시
.env
# 특정 파일은 무시하지 않음
!.gitignore
3. .gitignore 파일을 Git에 추가 및 커밋
.gitignore 파일을 Git에 추가하고 커밋합니다.
# .gitignore 파일 추가
git add .gitignore
# .gitignore 파일 커밋
git commit -m "Add .gitignore file"
4. .gitignore 파일 적용 확인
이제 .gitignore 파일에 정의된 패턴에 맞는 파일과 디렉토리가 Git의 추적에서 제외됩니다. 예를 들어, 로그 파일을 생성해보고 Git 상태를 확인해봅니다.
# 로그 파일 생성
echo "Log entry" > example.log
# Git 상태 확인
git status
.gitignore 파일에 정의된 패턴에 맞는 파일은 git status 명령어에 나타나지 않으며, Git의 버전 관리에서 제외됩니다.
git diff
git diff 명령어는 Git에서 파일의 변경 사항을 비교하고 보여주는 데 사용됩니다. 이 명령어는 워킹 디렉토리와 스테이징 영역 간의 차이, 또는 특정 커밋 간의 차이를 확인할 수 있도록 도와줍니다.
git diff의 주요 용도
- 워킹 디렉토리와 스테이징 영역 간의 차이:
- 워킹 디렉토리에서 변경되었지만 아직 스테이징 영역에 추가되지 않은 파일들의 차이를 보여줍니다.
- 명령어: git diff
- 스테이징 영역과 마지막 커밋 간의 차이:
- 스테이징 영역에 있는 파일들과 마지막 커밋된 파일들의 차이를 보여줍니다.
- 명령어: git diff --staged
- 특정 커밋 간의 차이:
- 두 커밋 간의 차이를 비교합니다.
- 명령어: git diff <commit1> <commit2>
- 브랜치 간의 차이:
- 두 브랜치 간의 차이를 비교합니다.
- 명령어: git diff <branch1> <branch2>
git diff의 출력 형식
git diff 명령어는 기본적으로 파일의 변경 사항을 유사한 형태로 보여줍니다. 여기에는 각 변경 사항의 위치와 변경된 줄이 포함됩니다. 예를 들어:
diff --git a/example.txt b/example.txt
index 83db48f..f7353f4 100644
--- a/example.txt
+++ b/example.txt
@@ -1 +1,2 @@
Hello, World!
+New line
이 출력에서 각 부분의 의미는 다음과 같습니다:
- diff --git a/example.txt b/example.txt: 비교하는 파일이 example.txt임을 나타냅니다.
- index 83db48f..f7353f4 100644: 파일의 해시 값과 파일 모드 정보입니다.
- --- a/example.txt: 변경 전 파일의 경로입니다.
- +++ b/example.txt: 변경 후 파일의 경로입니다.
- @@ -1 +1,2 @@: 변경된 위치와 줄 수를 나타냅니다.
- -1: 변경 전 파일의 첫 번째 줄이 변경됨을 의미합니다.
- +1,2: 변경 후 파일의 첫 번째 줄부터 두 줄이 변경됨을 의미합니다.
- Hello, World!: 변경 전 파일의 내용입니다.
- +New line: 변경 후 파일에 추가된 내용입니다.
'Everyday Study' 카테고리의 다른 글
2024.07.25 (목) { 원격저장소 연결, 트래킹브랜치, git push, git pull } (0) | 2024.07.25 |
---|---|
2024.07.24 (수) { git commit --amend, git add . 과 * 차이, git restore --staged <filename>, git tag, Git Alias } (0) | 2024.07.24 |
2024.07.22 (월) { 예외처리, try-catch } (0) | 2024.07.22 |
2024.07.19 (금) { 얕은&깊은복사 , 컬렉션구현방식, sublist - view (부분집합) } (0) | 2024.07.19 |
2024.07.18 (목) { toArray, Iterable, copyOf, Key-Value Pair } (0) | 2024.07.18 |