git diff
– 워킹 디렉터리에 있는 것(unstaged 상태)과 staging area에 있는 것을 비교
– 커밋을 수행한 경우에는 마지막 커밋한 것과 워킹 디렉터리에 있는것을 비교
– 수정한 파일을 모두 staging area에 넣은 경우 출력 내용은 없음
ex)
여기서는 git diff 명령어에서 출력된 변경된 부분과 헝크 헤더를 기준으로, 파일이 어떻게 변화했는지 설명드리겠습니다.
@@ -3,3 +3,4 @@
이 헝크 헤더는 원본 파일의 3번 줄부터 3줄이 있었고, 변경된 파일에서는 3번 줄부터 4줄이 있다는 것을 의미합니다. 이제 원본 파일과 변경된 파일의 각 줄을 하나씩 살펴보겠습니다.
diff --git a/difffile b/difffile 이전 상태):iksuplorer (1번 줄, 변경 없음)
iksuplorerssu (2번 줄, 변경 없음)
ikr (3번 줄)
ikr (4번 줄)
ikr (5번 줄)
iksuplorer (변경 없음)iksuplorerssu (변경 없음)ikr (변경 없음)ikr (변경 없음)ikr (변경 없음)diff --git a/difffile b/difffile 이후 상태):iksuplorer (1번 줄, 변경 없음)
iksuplorerssu (2번 줄, 변경 없음)
ikr (3번 줄, 변경 없음)
ikr (4번 줄, 변경 없음)
ikr (5번 줄, 변경 없음)
ik (6번 줄에 새롭게 추가된 줄)
iksuplorer (변경 없음)iksuplorerssu (변경 없음)ikr (변경 없음)ikr (변경 없음)ikr (변경 없음)ik (새로 추가된 줄)ikr이라는 내용이 반복됩니다.ik라는 새로운 줄이 추가되었습니다.@@ -3,3 +3,4 @@):-3,3: 원본 파일에서 3번 줄부터 시작해 3줄이 있었다는 뜻입니다.ikr이 존재했음을 나타냅니다.+3,4: 변경된 파일에서는 3번 줄부터 시작해 4줄이 있다는 뜻입니다.ik가 새롭게 추가되었음을 의미합니다.원본 파일:
iksuplorer
iksuplorerssu
ikr
ikr
ikr
변경된 파일:
iksuplorer
iksuplorerssu
ikr
ikr
ikr
ik (새로 추가된 줄)
결과적으로, 변경된 내용은 6번째 줄에 ik라는 새로운 줄이 추가된 것입니다. 헝크 헤더는 이 변경이 3번 줄부터 시작되어 6번 줄까지 이어진다는 것을 설명하고 있습니다.
git commit –a –m “커밋 제목”
: git add 추가 기능
– -a 옵션은 tracked 파일에만 사용 가능
git rm {파일명}
– 위 명령 후 commit을 수행해야 함
– Git으로부터 더 이상 추적되지 않음
– 워킹 디렉터리에 있는 파일도 삭제됨
git rm --cached {파일명}
– 위 명령 후 commit을 수행해야 함
– Git으로부터 더 이상 추적되지 않음
– 워킹 디렉터리에 여전히 보존됨
– 추적되지 말아야 할 파일들을 실수로 넣은 경우에 사용
• 오브젝트 파일 등등
둘 다 추적상태를 끊어주지만, 워킹 디렉토리에서의 보존 여부가 다르다.
git mv file_from file_to
파일명 변경 예1)
git mv README.md README
파일명 변경 예2)
mv README.md README
git rm README.md
git add README
ex)
1. mv README.md README를 실행하면 워킹 디렉토리에서 파일 이름은 변경되지만, Git은 이 변경 사항을 반영하지 않습니다.
2. 따라서 Git은 여전히 README.md를 추적 중이며, 새로 생성된 README 파일은 Git에 의해 추적되지 않는 상태로 남아 있습니다.
Git의 상태 확인:
파일 이름을 변경한 후 git status 명령어를 실행하면 다음과 같은 상태를 확인할 수 있습니다:
git log
– 저장소의 커밋 히스토리를 시간순으로 보여줌
– 체크섬, 저자명, 저자 이메일, 커밋 날짜, 커밋 메시지
– -숫자
• 최근 숫자 개의 결과만 출력
– --oneline
• 각 커밋을 한 라인으로 요약해서 출력
– --graph
• 브랜치와 머지 히스토리 출력

git commit --amend
• 커밋을 했는데 파일을 빠뜨린 경우, 혹은 커밋 메시지를 잘못 작성하여 다시 커밋하고 싶을 때 사용
• 커밋을 했는데 stage하는 것을 잊은 경우 다음과 같이 수행
git commit –m “initial commit”
git add forgotten_file
git commit --amend //커밋이 첫 번째 커밋을 덮어씀(체크섬 값은 변경)

– 커밋에 태그를 다는 기능
– 하나의 커밋에 여러 태그 가능하지만 여러 커밋에 같은 태그는 불가능

– git tag –a –m <message> <tag name> [branch or checksum]
• -a : 주석 포함하여 태그 달기
• -m : 로 간단한 주석 작성
새로운 브랜치를 만들면 그 브랜치는 현재 체크아웃된 브랜치를 기준으로 만들어지며, 현재 브랜치의 최신 커밋 내용을 그대로 이어받습니다. 이 과정에서 자동으로 병합(merge)이 일어나는 것은 아니지만, 새로운 브랜치는 기존 브랜치의 상태를 그대로 복사하게 됩니다.
따라서 git fetch는 원격의 내용을 가져오는 것일 뿐, 로컬 브랜치에는 자동으로 반영되지 않는다는 점을 기억하면 됩니다.

mkdir branch로 시작하며 git tag를 사용한 버전 관리를 포함하여 원하는 결과를 얻을 수 있습니다.
디렉토리 생성
먼저 branch라는 디렉토리를 만들고 그 안에서 작업을 시작합니다.
mkdir branch
cd branch
git init
파일 생성 및 첫 번째 커밋
project_file 파일을 생성하고 첫 번째 커밋을 합니다.
echo "Project Version 1" > project_file
git add project_file
git commit -m "첫 번째 커밋"
두 번째 커밋
project_file에 내용을 추가한 후 두 번째 커밋을 합니다.
echo "Project Version 2" >> project_file
git commit -a -m "두 번째 커밋"
세 번째 커밋
또다시 내용을 추가하고 세 번째 커밋을 진행합니다.
echo "Project Version 3" >> project_file
git commit -a -m "세 번째 커밋"
브랜치 생성: left와 right
이제 브랜치를 분기합니다.
left 브랜치:
git branch left
git checkout left
echo "Left branch content" >> project_file
git commit -a -m "left 브랜치 첫 번째 커밋"
git tag V3.1
right 브랜치:
git checkout master
git branch right
git checkout right
echo "Right branch content" >> project_file
git commit -am "right 브랜치 첫 번째 커밋"
git tag V3.2
V4 버전으로 이동
다시 master 브랜치로 돌아가서 V4 버전과 커밋을 관리합니다.
git checkout main
echo "V4 버전 네 번째 커밋" >> project_file
git commit -a -m "네 번째 커밋 (V4)"
git tag V4
결과 확인
이제 git log --oneline --graph --all 명령어로 다이어그램에서처럼 브랜치와 버전 태그가 제대로 만들어졌는지 확인합니다.
git log --oneline --graph --all
V3.1과 V3.2는 각각 left와 right 브랜치에서 첫 번째 커밋 이후 태그가 설정되었고, V4는 master 브랜치에서 다수의 커밋 후 태그로 관리되었습니다.이와 같이 진행하면 문제에서 요구하는 Git 브랜치와 버전 관리 구조를 성공적으로 구현할 수 있습니다.