**GIT
1.설치 및 확인
1)설치
=>window: https://git-scm.com/download 에서 다운로드 받아 설치
=>mac: https://git-scm.com/download 에서 다운로드 받아 설치하거나 brew install git 명령으로 설치
=>linux
https://git-scm.com/download/linux 에 설치 방법 메뉴얼 확인
2)설치 확인
=>git --version
3)깃의 기본 브랜치 이름을 main 으로 변경
=>깃의 기본 브랜치는 master 이고 git hub 의 기본 브랜치 이름은 main
git config --global init.defaultBranch main
4)로컬 저장소에 git hub 사용자 등록
git config --global user.name 이름
git config --global user.email 이메일
=>--global을 제외하면 현재 프로젝트에만 적용
2. 버전 만들기
1)git init
=>로컬 저장소를 만드는 명령
=>성공하면 메시지가 출력되고 현재 디렉토리에 .git 이라는 디렉토리가 생성
.이 붙으면 리눅스 나 유닉스에서 숨김 디렉토리
2)git status
=>현재 상태 확인 명령
현재 상태에서는 커밋된 것도 없고 아무런 변화도 없다고 메시지 출력
=>a.txt 라는 파일을 생성해서 A 라는 글자를 추가하고 명령을 수행
a.txt 가 untrackd files 라는 메시지 와 함께 출력됩니다.
변화가 발생했는데 추적하지 않는 파일이라는 메시지 - 인덱스 영역에 포함되지 않은 파일
3)git add
=>스테이지에 올리는 명령
=>이제 파일의 변경 내용을 추적하라는 의미
=>형식
git add <파일경로>
=>a.txt 파일을 스테이지에 추가: git add a.txt
=>상태 확인: git status
파일에 변화가 발생했다고 Changes to be committed 메시지가 출력됨
=>현재 디렉토리의 모든 내용을 add 할 때는 git add . 하면 됩니다.
4)git commit
=>현재까지의 추적 내용을 로컬 저장소에 반영하는 명령
=>기본 형식은 git commit --message "메시지" 또는 git commit -m "메시지"
=>명령을 성공적으로 수행하면 새로운 버전을 만들어 냅니다.
=>커밋 수행: git commit -m "first commit"
=>성공적으로 수행하면 수행한 결과가 메시지로 출력되고 git status를 수행해보면 변경된 내용이 없다고 메시지가 출력
5)git log
=>로컬 저장소의 커밋 목록을 출력하는 명령
=>커밋 해시, 만든 사람, 날짜, 메시지가 출력됩니다.
HEAD 는 현재 사용 중인 브랜치를 가리킵니다.
6)git commit -am "메시지"
=>git add . 과 git commit -m 명령을 합친 명령
=>a.txt 파일에 B를 추가
=>현재 상태 확인: git status
a.txt 가 변경되었다고 메시지가 출력되고 추적하지 않는다고 출력
=>한꺼번에 스테이징 영역에 올리고 commit
git commit -am "second commit"
=>현재 상태 확인: git log
commit 6d92d05f6ff88ea42c9c001fab3eb1c85b862fbf (HEAD -> main)
Author: itggangpae <ggangpae1@gmail.com>
Date: Mon Oct 16 11:47:42 2023 +0900
second commit
commit 7086bd4ec85752ca69baae6efec2f19865118577
Author: itggangpae <ggangpae1@gmail.com>
Date: Mon Oct 16 11:37:37 2023 +0900
first commit
=>git commit -am "메시지" 명령은 한번이라도 커밋된 파일에 대해서만 사용이 가능합니다.
a.txt 파일에 C를 추가
b.txt 파일을 추가해서 D를 추가
git commit -am "third commit"
git log 를 이용하면 commit 이 발생했다고 출력됩니다.
git status를 수행해보면 b.txt 는 아직 추적하지 않는다고 메시지가 출력됩니다.
7)commit 메시지 본문 작성
=>메시지는 제목 과 본문으로 구성
=>git commit -m 은 제목만 작성한 것입니다.
=>메시지를 작성하고자 하는 경우는 git commit 명령을 수행하면 됩니다.
=>a.txt 파일에 D 라는 문자를 추가
=>현재 디렉토리의 모든 파일을 스테이지에 추가: git add .
=>git commit 명령 수행 - editor 가 수행
i 키를 눌러서 편집 모드로 만든 후 작성
첫째 줄이 제목이 됩니다.
다 작성을 하면 esc 를 눌러서 명령 모드로 전환한 후 :wq!를 눌러서 저장하고 종료
8)git log
=>커밋을 조회하는 명령
=>단순한 형태로 조회: git log --oneline
=>자세히 조회: git log --patch 또는 git log -p
=>그래프 형태로 조회: git log --graph
=>브랜치가 여러 개 만들어지고 여러 번 분기를 했을 때 트리 형태로 출력
=>모든 브랜치의 커밋 명령을 조회: git log -- branches
9)태그 관리
=>태그는 커밋에 불일 수 있는 서브 타이틀
=>태그를 이용해서 버전을 표시하는 경우가 많음
=>git tag <태그> 를 수행하면 현재 브랜치에 태그가 추가됩니다.
=>특정 커밋에 추가하고자 하는 경우에는 git tag <태그> <커밋>
=>현재 커밋에 v1.0.0 태그 추가: git tag v1.0.0
=>다른 커밋에 v0.0.1 태그 추가:
=>태그를 조회: git tag --list 또는 git tag -l
=>태그를 삭제: git tag --delete <태그> 또는 git tag -d <태그>
10) 파일 상태 확인
=>git 작업 트리
git 은 관리하는 프로젝트의 작업을 효율적으로 처리하는 작업 트리라는 개념을 이용
작업 트리는 깃이 추적하는 파일 과 추적하지 않는 파일을 구분하고 추적하는 파일들의 상태를 구분짓는 영역
이 내용은 .git 이라는 숨김 디렉토리에서 관리 - .git을 삭제하면 git 과 관련된 모든 내용이 소멸됩니다.
이 영역은 3개의 영역으로 구성
Working Directory: 실제 작업 중인 파일들이 존재하는 영역으로 파일을 생성하거나 기존 파일을 수정한다면 이는 Working Directory에서 작업 중
Staging Area: 작업 디렉토리의 파일 중 git 이 추적하는 파일을 식별하는 영역으로 .git 디렉토리 내부의 index 파일에서 추적하는 파일을 식별
Local Repository: 스테이징에서 추적하는 파일이 Commit 으로 등록되는 영역으로 스테이징 영역의 파일 혹은 파일들이 하나의 변경 단위인 Commit 으로 등록되는 곳
작업 디렉토리에서 스테이징 영역으로 등록하는 명령이 git add 가 되고 스테이징 영역에서 로컬 저장소로 이동하는 명령이 git commit
=>파일 상태
untracked 상태: 현재 작업 디렉토리에는 존재하지만 git 이 추적하지 않는 파일 상태
tracked 상태: git 이 추적 중인 상태 - 스테이징 영역 과 로컬 저장소에 있는 파일
=>git add 명령 수행 시 warnig 이 발생하는 경우: 운영체제마다 줄 바꿈 문자를 인식하는 방법이 달라서 발생하는데 이 경우에는 git config core.autocrlf true 를 설정하면 됩니다.
=>Unmodified 상태 와 Modified 상태
Unmodified 상태: 스테이징 영역에 존재하지만 수정하지 않은 상태
Modified 상태: 스테이징 영역에 존재하고 수정한 상태
=>가장 최근 커밋 메시지 수정: git commit --amend -m "메시지"
=>유저 이름 과 이메일도 수정 가능: git commit --amend --author "작성자 <이메일>"
3.버전 비교
1)get diff
=>최근 커밋 과 작업 디렉토리를 비교
=>커밋한 이후에 작업 디렉토리에서 어떤 작업이 이루어졌는지 확인하기 위해서 사용
=>a.txt 에 문자 하나를 추가하고 저장
=>git diff
diff --git a/a.txt b/a.txt
index 870951a..8fda00d 100644
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,5 @@
A
B
-C
\ No newline at end of file
+C
+D
+E
2)get diff --staged
=>최근 커밋 과 스테이지를 비교
=>스테이지는 add를 해야 변경이 발생
=>git add a.txt
=>git diff --staged
결과는 add를 하기 전의 get diff 와 동일
3)git diff <커밋> <커밋>
=>커밋끼리의 변경 내용을 확인
=>커밋은 40자리 해시를 전부 이용해도 되고 짧은 해시를 이용해도 됩니다.
=>git commit -m "fourth commit"
=>git log 는 커밋된 정보를 출력하고 git log --oneline 을 이용하면 간단히 출력
git diff 0a48666 091e4f8
git diff 091e4f8 0a48666
=>커밋은 순서대로 적용되기 때문에 2개의 순서에 따라 결과는 반대로 출력
=>해시 코드 대신에 현재 커밋을 가리키는 HEAD를 이용하는 방법도 가능
바로 이전 커밋은 HEAD^ 또는 HEAD~1 로 표기하고 그 이전의 커밋은 HEAD^^ 또는 HEAD~2로 표기하는 것이 가능
=>현재 커밋 과 직전의 커밋의 내용을 비교
git diff HEAD HEAD~1
git diff HEAD HEAD^^
4.커밋 되돌리기
=>실습을 위한 프로젝트 생성
빈 디렉토리 생성
git init
a.txt를 추가하고 A를 작성한 후 저장하고 add 와 commit(first commit)
a.txt에 B를 추한 후 저장하고 add 와 commit(second commit)
a.txt에 C를 추한 후 저장하고 add 와 commit(third commit)
a.txt에 D를 추한 후 저장하고 add 와 commit(fourth commit)
=>커밋을 되돌리는 방법은 2가지
1)reset
=>되돌아갈 버전의 시점으로 완전하게 되돌아 가는 것
=>종류가 3가지 - soft, mixed, hard
예를 들어 A B C 각 문자를 추가하고 commit 을 3번 수행
A 추가 -> 스테이지에 올리기 -> 커밋 -> B 추가 -> 스테이지에 올리기 -> 커밋 -> C 추가 -> 스테이지에 올리기 -> 커밋을 한 상태
=>soft reset 은 커밋 했다는 사실만 되돌리는 것
두번째 버전으로 soft reset 을 수행
A 추가 -> 스테이지에 올리기 -> 커밋 -> B 추가 -> 스테이지에 올리기 -> 커밋 -> C 추가 -> 스테이지에 올리기
=>mixed reset 은 커밋 과 스테이지를 되돌리는 것
두번째 버전으로 mixed reset을 수행
A 추가 -> 스테이지에 올리기 -> 커밋 -> B 추가 -> 스테이지에 올리기 -> 커밋 -> C 추가
=>hard reset 은 디렉토리 변경 사항까지 되돌리는 것
두번째 버전으로 hard reset을 수행
A 추가 -> 스테이지에 올리기 -> 커밋 -> B 추가 -> 스테이지에 올리기 -> 커밋
=>현재 상태
A, B, C, D 네가지 글자를 추가하고 각각 commit 을 한 상태
=>soft 커밋 수행
git reset --soft <되돌아갈 커밋>
=>세번째 커밋으로 소프트 커밋
> git log --oneline
4d02dc8 (HEAD -> main) fourth commit
54e96a9 third commit
9bc0a3d second commit
03924f7 first commit
> git reset --soft 54e96a9
> git log --oneline
54e96a9 (HEAD -> main) third commit
9bc0a3d second commit
03924f7 first commit
> a.txt 파일에는 D 가 남아있음
> git diff --staged 로 스테이지 와 현재 커밋의 차이 확인
=>mixed reset 수행: git reset <커밋이름>
> git commit -m "fourth commit"
> git log --oneline
2dbb71d (HEAD -> main) fourth commit
54e96a9 third commit
9bc0a3d second commit
03924f7 first commit
>git reset 54e96a9
Unstaged changes after reset:
M a.txt
> a.txt 파일을 확인 : 변경 내용은 남아있음
> git status 로 staged 에 추가되지 않은 것을 확인
=>hard reset 수행: git reset --hard <커밋이름>
> git commit -am "fourth commit"
> git log --oneline
a13a2c8 (HEAD -> main) fourth commit
54e96a9 third commit
9bc0a3d second commit
03924f7 first commit
> git reset --hard 54e96a9
>이번에는 a.txt에 작업한 D 가 없어집니다.
하드 리셋은 작업 디렉토리의 변경 내역까지 모두 소멸 시킵니다.
2)revert
=>버전을 되돌리지만 되돌아간 상태에 대한 새로운 버전을 만드는 방식
A -> B -> C -> D -> E
각 문자를 추가하고 전부 Commit을 한 경우 - Commit 은 5번 이루어짐
네번째 자리로 revert 를 하게되면 다섯번째 버전이 없어지지 않고 네번째 버전의 상태를 가진 여섯번째 버전이 만들어짐
=>git revert <최소할 커밋>
=>현재 커밋 상태 확인
> git log --oneline
54e96a9 (HEAD -> main) third commit
9bc0a3d second commit
03924f7 first commit
=>세번째 커밋 취소
> git revert 54e96a9
[main 7e4f41c] Revert "third commit"
1 file changed, 1 insertion(+), 2 deletions(-)
=>a.txt 파일의 A 라는 글자가 소멸됨
=>현재 커밋 상태 확인: git log --oneline
7e4f41c (HEAD -> main) Revert "third commit"
54e96a9 third commit
9bc0a3d second commit
03924f7 first commit
새로운 커밋이 추가됨
5.작업 임시 저장하기
1)git stash: 변경 사항을 임시 저장하기
=>stash 명령은 tracked 상태의 파일에 대해서만 사용할 수 있음
=>빈 디렉토리를 생성하고 git 초기화
=>a.txt를 만들고 A를 추가한 후 저장
=>커밋 수행
> git add .
> git commit -m "first commit"
=>작업 내역을 임시 저장 영역에 저장
a.txt 파일에 B를 추가
> git stash -m "add B"
=>a.txt를 확인하면 수정한 내용이 없어집니다.
first commit을 한 상태로 이동
=>작업 내역을 임시 저장 영역에 저장
a.txt 파일에 C를 추가
> git stash -m "add C"
2)임시 저장한 목록 확인
=>> git stash list
stash@{0}: On main: add C
stash@{1}: On main: add B
임시 저장한 내역은 최근의 것 부터 0부터 인덱싱
3)임시 저장된 작업 적용하기
=>git stash apply <스태시>
뒤의 스태시를 생략하면 가장 최근의 stash 가 적용됩니다.
=>stash@{0} 적용하기
git stash apply stash@{0}
최근에 작업했던 C를 추가하는 작업이 반영됨
a.txt 의 내용은 A 와 C
=>stash@{1} 적용하기
git stash apply stash@{1}
적용 실패 - stash 1의 작업이 stash 0의 작업보다 나중의 작업이므로 이미 stash 0의 작업 안에 stash 1의 작업 내용이 포함되어 있기 때문
4)임시 작업 삭제
=>git stash drop <스태시>
=>git stash clear 를 호출하면 모든 작업이 삭제
6.branch
=>버전을 여러 흐름으로 나누어 관리하는 것
1)브랜치를 만들어서 여러 흐름으로 나누어 관리해야 하는 이유
=>어느 정도 만들어진 쇼핑몰 코드를 수정해야 하는 경우
한 명의 개발자가 장바구니 기능을 추가하고 다른 개발자가 주문 목록 기능을 추가할려고 하는 경우
이런 경우 서로 간의 작업 내용은 서로의 작업과 전혀 관련없는 부분이 있을 것이고 때로는 같은 코드를 다르게 수정하는 부분도 있음
이 경우 코드를 일일이 대조하고 합칠 코드를 판단하는 작업은 매우 번거로운 작업이고 수작업으로 하다 보면 실수할 수 도 있음
=>이런 경우 동일한 코드를 가지고 다른 브랜치를 만들어서 각각 작업을 하도록 한 후 이를 머지를 하게 되면 코드를 일일이 살펴봐야 하는 번거로움이 없어집니다.
이 경우에도 같은 코드를 다르게 수정하는 부분은 확인을 해야 함
브랜치를 나누어서 작업할 때 주의할 점은 동일한 코드를 다르게 수정하는 충돌의 부분입니다.
이렇게 되면 어떤 작업을 적용할 지 나중에 결정을 해야 합니다.
2)브랜치 실습을 위한 프로젝트 생성
=>실습을 위한 프로젝트 생성
빈 디렉토리 생성
git init
a.txt를 추가하고 A를 작성한 후 저장하고 add 와 commit(first commit)
a.txt에 B를 추한 후 저장하고 add 와 commit(second commit)
a.txt에 C를 추한 후 저장하고 add 와 commit(third commit)
=>현재 상태
first commit -> second commit -> third commit
현재 브랜치는 main
3)현재 브랜치 확인
=>git status
=>git log --oneline : HEAD 가 가리키는 것이 현재 브랜치
=>git branch
4)브랜치 생성 명령
=>git branch 브랜치이름
현재 브랜치를 복제해서 새 브랜치가 만들어 집니다.
=>foo 라는 브랜치를 생성
git branch foo
5)체크아웃
=>checkout 은 해당 브랜치로 작업 환경을 변경하는 것
=>git checkout <브랜치>
=>foo 브랜치로 체크 아웃
git checkout foo
Switched to branch 'foo' 메시지 출력
=>foo 브랜치에서 foo_d.txt 파일을 만들고 D 라고 입력하고 저장한 후 커밋
> git add foo_d.txt
>git commit -m "fourth commit"
[foo 548ad5e] fourth commit
1 file changed, 1 insertion(+)
create mode 100644 foo_d.txt
=>foo 브랜치에서 foo_e.txt 파일을 만들고 E 라고 입력하고 저장한 후 커밋
> git add foo_e.txt
>git commit -m "fifh commit"
[foo 548ad5e] fourth commit
1 file changed, 1 insertion(+)
create mode 100644 foo_d.txt
=>현재 상태
main: a.txt 파일에 A, B, C 기록
foo: main -> foo_d.txt 와 foo_e.txt 작업을 수행하고 commit
=>main 브랜치로 checkout
main이 commit을 완료하고 난 후 foo 에서 추가한 foo_d.txt 와 foo_e.txt 는 화면에서 없어집니다.
=>2개의 브랜치를 비교
git diff <브랜치1> <브랜치2>
=>브랜치를 만들면서 체크 아웃
git checkout -b <브랜치>
=>bar 라는 브랜치를 만들면서 체크 아웃
git checkout -b bar
git hub에 푸시를 할 때 main 이라는 브랜치가 없어서 푸시가 안되는 경우 git checkout -b main을 수행한 한 후 푸시를 하면 됩니다.
6)git merge <브랜치>
=>브랜치를 병합하는 기능
=>현재 브랜치에 브랜치를 병합하는 기능 - 변경 내용을 적용
=>main 브랜치에 foo 브랜치의 내용을 병합
> git checkout main
> git status 나 git log --oneline 으로 현재 브랜치를 확인
> git merge foo
=>foo 브랜치에서 만든 파일 2개가 추가됩니다.
7)충돌
=>브랜치를 병합할 때 충돌이 발생할 수 있습니다.
이 경우는 서로 다른 브랜치에서 동일한 파일을 서로 다른 내용을 수정한 상태에서 병합을 하고자 하는 경우 입니다.
=>main 브랜치에서 a.txt 파일에 D라는 문자를 추가하고 commit
> git add a.txt
> git commit -m "a.txt use"
=>foo 브랜치에서 foo_g.txt 파일을 추가하고 G 라는 글자를 추가한 후 commit
> git checkout foo
Switched to branch 'foo'
> git add foo_g.txt
> git commit -m "foo_g use"
[foo 8d1d647] foo_g use
1 file changed, 1 insertion(+)
create mode 100644 foo_g.txt
=>main 브랜치에 foo 브랜치를 병합
> git checkout main
> git merge foo
Merge made by the 'ort' strategy.
foo_g.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 foo_g.txt
별다른 문제없이 병합이 수행됩니다.
main 에서는 a.txt 를 수정했고 foo에서는 foo_g.txt를 생성
다른 파일을 가지고 작업하는 경우는 아무런 문제가 발생하지 않습니다.
=>main 브랜치에서 a.txt 파일의 내용을 master 로 수정하고 master 라는 메시지로 commit
> git checkout main
> git add a.txt
> git commit -m "master"
=>foo 브랜치에서 a.txt 파일의 내용을 foo 로 수정하고 foo 라는 메시지로 commit
> git checkout foo
> git add a.txt
> git commit -m "foo"
=>main 브랜치에서 foo 브랜치를 병합
> git checkout main
Switched to branch 'main'
> git merge foo
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.
머지 실행: a.txt를 머지하다가 실패 - 이 경우는 파일에 보면 2개 브랜치의 변경 내용이 모두 출력됩니다.
> a.txt 파일의 상태
<<<<<<<<<<<<<<<<<<< HEAD
master
==================
foo
<<<<<<<<<<<<<<<<<<<foo
=>이런 경우에는 변경 내용 중 하나를 선택하고 다시 add를 수행하고 commit을 수행해야 합니다.
> git add a.txt
> git commit -m "merge"
8)브랜치 삭제
=>git branch -d <브랜치> 또는 git branch --delete <브랜치>
=>현재 브랜치는 삭제가 안되므로 다른 브랜치로 체크 아웃하고 삭제해야 합니다.
=>git checkout -b bar
9)git rebase <브랜치>
=>브랜치를 재배치하는 명령
=>브랜치의 재배치는 뻗어나온 기준점을 옮기는 방법
main 브랜치: A -> B -> C
foo 브랜치를 생성: A -> B -> C
main 브랜치에서 D -> E 를 추가해서 commit
foo 브랜치의 기준점을 main 브랜치의 가장 최근의 commit 으로 이동
foo 브랜치에서 git rebase main을 수행하면 됩니다.
=>현재 상태를 확인: git log --oneline
=>현재 main을 기준으로 새로운 브랜치를 생성하고 체크 아웃: git checkout -b bar
=>bar_a.txt 파일을 만들고 A를 저장하고 commit
> git add bar_a.txt
> git commit -m "bar_a"
[bar a58986a] bar_a
1 file changed, 1 insertion(+)
create mode 100644 bar_a.txt
=>bar_b.txt 파일을 만들고 B를 저장하고 commit
> git add bar_b.txt
> git commit -m "bar_b"
=>현재 bar 브랜치의 내용은 a.txt 파일에는 master 가 입력되어 있고 bar_a.txt 와 bar_b.txt 가 추가된 상태
=>현재까지의 브랜치 상태를 확인
git log --oneline --branches
=>main 브랜치로 체크 아웃
git checkout main
=>D가 저장된 d.txt 만들고 commit
> git add "d.txt"
> git commit -m "commit"
=>E가 저장된 e.txt 만들고 commit
> git add "e.txt"
> git commit -m "commit"
=>bar 브랜치로 체크 아웃: git checkout bar
main 브랜치에 추가된 파일이 보이지 않습니다.
=>bar 브랜치의 기준점을 main 의 마지막 commit 으로 이동
> git rebase main
merge를 하지 않았음에도 불구하고 main 의 변경 내용을 가져왔습니다.
merge 와는 다른 개념
git hub 에서 다른 유저의 프로젝트의 fork를 설정했는데 그 유저의 branch에 변경이 발생하면 fork 된 프로젝트에는 경고가 발생합니다.
그런 경우에는 프로젝트를 업데이트하라는 메시지가 출력되는데 이 작업이 rebase 와 유사
=>git log --oneline --branches 를 수행
커밋의 순서가 변경된 것을 확인할 수 있습니다.
bar에서 수행했던 commit 들이 main 브랜치에서 수행했던 commit 위에 배치가 됩니다.
최근에 된 것으로 수정됨
bar의 기준점이 main 브랜치의 가장 최근의 commit 으로 변경된 것입니다.
7.로컬 저장소 관련 명령
=>git init: 로컬 저장소 생성
=>git status: 작업 디렉토리 상태 확인
=>git add
git add <파일 경로>: 파일 경로에 해당하는 파일을 stage 에 추가
git add . : 현재 디렉토리의 모든 파일을 stage 에 추가
=>git commit: 메시지 제목과 내용을 설정해서 stage의 내용을 로컬 저장소에 추가
=>git commit --message, -m <메시지 제목>: 메시지 제목만 설정해서 stage의 내용을 로컬 저장소에 추가
=>git log: 커밋 목록을 출력
git log --oneline: 한 줄로 간단하게 출력
git log --patch: 자세히 출력
git log --graph: 그래프로 출력
git log --branches: 모든 브랜치의 커밋 목록을 출력
=>git tag
git tag <태그>: 현재 브랜치에 태그(버전) 추가
git tag <태그><커밋>: 커밋에 태그 추가
git tag
git tag --list
git tag -l: 태그 목록 조회
git tag --delete <태그>
git tag -d <태그>: 태그 삭제
=>git diff
git diff : 최근 커밋과 현재 작업 디렉토리 비교
git diff --staged: 최근 커밋 과 스테이지 비교
git diff <커밋> <커밋>: 커밋 비교
git diff <브랜치> <브랜치>: 브랜치 비교
=>git reset
git reset --soft <되돌아갈 커밋>: 커밋으로 소프트 리셋(커밋만 삭제)
git reset <되돌아갈 커밋>: 커밋으로 mixed 리셋(커밋, 스테이지 삭제)
git reset --hard <되돌아갈 커밋>: 커밋으로 하드 리셋(커밋, 스테이지, 작업 내역 삭제)
=>git revert <최소할 커밋>: 커밋을 취소한 지점으로 새로운 커밋 생성
=> git branch : 브랜치 확인
git branch <브랜치이름> : 브랜치 생성
git checkout <브랜치이름> : 브랜치로 체크 아웃
git branch --delete <브랜치이름> : 브랜치 삭제
git checkout -b <브랜치이름>: 브랜치를 생성하고 체크아웃
git merge 브랜치이름: 브랜치 병합
git rebase <브랜치>: 브랜치 기준점 이동