
하나의 버전으로 남기는 행위 / 결과물repository라는 사람도 있지만repository는 .gitgit init

git에게 commit한 사용자 기록git config user.name "사용자 이름"
git config user.email "사용자 이메일"
git add "파일" 명령어를 입력 해야된다add : 커밋에 반영될 파일을 지정git commit -m "커밋에 관련된 메시지"
git add를 한 파일들이 존재하는 영역🔥 staging area 존재하는 이유
원하는 파일만 커밋을 하지 못하기 때문에 필수적으로 필요한 영역예를들면 A.txt, B.txt 파일이 있다.
개발자는A.txt에 대해서 완료하지 못한 상태B.txt는 완료된 상태이다.
근데 지금까지 했던 거는 커밋을 하고 싶을때, 그럴때 필요해서staging area가 필요한 것이다.
git status
git add .
git add를 해주지 않은 상태새로 생성한 파이에 내용을 쓰고
git add한 상태
한 번이라도 커밋에 포함 되었던 파일이라도 내용을 수정하고,git add한 상태
working direcoty 안의 모든 파일이 해당 상태
git reset
git push -u origin master # 로컬 레포지토리 내용을 처음 리모트 레포지토리에 올릴때 사용
git push
git pull
🔥 리모트 레포지토리 기능
1. 안정성
2. 협업 가능
git clone "주소"
git log [--pretty=oneline] # 지금까지 커밋된 기록을 보여줌
git show [id 4자리정도 입력] # 이전과 어떤게 바뀌었는지 알려줌
git commit --amend
🔥 commit 메시지 작성요령
1. 제목과 상세내용 사이에 한 줄을 비운다. (그래야 가독성이 좋다)
2. 제목 뒤에 . 붙이지 않는다.
3. 제목의 첫번째 알파벳 = 대문자
4. 제목은 명령조로 작성
커맨드 지정
git config alias.history 'log --pretty=oneline'
커맨드 삭제
git config --unset alias.st
git diff 이전 커밋아이디 이후 커밋아이디

git reset --[옵션] 커밋아이디
git reset --[옵션] HEAD^
git reset --[옵션] HEAD~x # x단계 전으로
계속 git add를 할 때마다 staging area에서는 새로운 파일이 추가되거나 원래 있던 파일이 더 새로운 버전의 것으로 교체
🔥 원래 있던게 사라지는게 아님
🔥 staging area에 있던 것들은 커밋을 하더라도 그것과 상관없이 계속 남아 있음
| git reset [옵션] zxc | working directory | staging area | repository |
| --soft | x | x | HEAD -> zxc |
| --mixed | x | HEAD -> zxc | HEAD -> zxc |
| --hard | HEAD -> zxc | HEAD -> zxc | HEAD -> zxc |
🔥 hard 옵션은 조심!
git tag [태그이름] [커밋아이디]
git tag # 프로젝트 디렉토리에 있는 모든 태그 조회
git show [태그이름] # 태그에 연결된 커밋정보 보는법
git branch
git branch [브랜치 이름]
git checkout [브랜치 이름]
git branch -d [브랜치 이름]
git checkout -b [브랜치 이름]
git merge [브랜치 이름]
git merge --abort
🔥 Conflict 발생한 파일이 너무 많을때만 사용한다.
git remote add origin [리모트 레포지토리]
remote : 리모트 레포지토리에 관한 작업을 할 때 사용하는 커맨드add : 새로운 리모트 레포지토리를 등록origin [리모트 레포지토리] : 리모트 레포지토리를 origin 이라는 이름으로 등록
리모트 레포지토리->origin으로 표현하는 것
git push -u origin master
master 브랜치 내용origin이라는 리모트 레포지토리로 보낸다.-u : --set-upstream의 약자tracking 하는걸로 설정tracking connection이라고 한다.upstream branch 라고 한다.
HEAD는 어떤 커밋을 가르키는 존재 (포인터)HEAD가 커밋을 직접 가르키는 것은 아니다.HEAD -> branch -> commit
이런식으로 branch을 통해서 커밋을 가르킨다.
다시 정리하면
branch = 커밋을 가르키는 존재 (포인터)
HEAD = branch를 통해 커밋을 간접적으로 가르키는 존재 (포인터)
가르키는 브랜치가 다른 특정 commit을 가르킴🔥 과거의 commit으로 reset한다고 해서 그 이후의 commit들이 삭제되는 것은 아니다.
🔥 git reset은 과거의 commit뿐만 아니라 현재의 HEAD가 가르키는 commit 이후의 commit으로도 할 수 있다.
다시 한번 정리하자면
git reset= HEAD, branch 동시에 같은 commit을 가르키는 것을 지정
git checkout= HEAD가 commit을 가르키는걸 지정 (HEAD가 branch를 가르키도록 할 수 있음)

Fast-forward merge라고 부른다. (forward = 빨리감기)
3-way merge라고 부른다.case4 같은 경우는 변화가 모두 다르기 때문에 conflict가 발생하는 것이다.git fetch
git diff로 비교🔥 git pull = git fetch + merge
git blame [파일명]
git revert [커밋 아이디]
git revert [커밋 아이디1]...[커밋 아이디2]
git reflog
git rebase [브렌치 이름]
git rebase --continue
🔥 merge , rebase 차이
1. rebase는 새로운 커밋을 만들지 않음
2. rebase로 만들어진 커밋 히스토리는 merge로 만들어진 커밋 히스토리보다 깔끔
merge와 rebase의 결과는 같지만, 히스토리를 깔끔하게 만들기 위해서 사용
git stash
git stash apply [아이디]
git stash drop [아이디]
git stash list
git stash pop [아이디]
git stash 을 사용해 stack 내용을 저장git stash apply🔥 나중에 또 쓸 필요가 있는 작업내용이다 -> git stash apply
🔥 아니다 나중에 쓸필요 없다 -> gti stash pop
git cherry-pick [아이디]