git 저장소 내에서 git으로 관리하고 싶지 않은 파일이 있다면, .gitignore 파일을 만들어서 관리
# 특정파일
data.csv
# 특정폴더
images/
# 특정확장자
*.png
!profile.png # 특정파일 제외
.gitignore
문서 안에 파일 명을 입력 (Code Editor로 입력 권장)git add .
git commit -m 'message'
git push origin master
[충돌 상황] github 상에서 README 작업하자 자동 커밋됨, 그 후 로컬 상 해당 폴더를 push
하자 충돌 발생
[충돌 이유] 로컬의 커밋 파일과 원격 저장소의 커밋 파일과 다름, 즉 커밋 버전이 달라서 충돌남
[해결방안]
pull
git pull origin master # Esc + :wq 로 빠져나오기
merge commit 발생
push
git push origin master
$ git log --oneline
# merge commit 발생!
3bb716a (HEAD -> master, origin/master) Merge branch 'master' of <https://github.com/sammitako/practice>
원격 저장소의 변경 사항을 받아옴
git pull origin master
⚠️ 만약 충돌날 경우, git log
와 github
의 히스토리를 비교 후 pull
→ push
하면 THE END
원격 저장소를 복제하여 로컬에서 활용할 수 있도록 함
git clone 'HTTPS URL' # 원격 저장소 이름의 폴더가 생성되고, 해당 폴더로 이동하면 git을 활용할 수 있음
# 복제 완료 후, 해당 폴더에서 작업 시작~
clone
을 할 경우 DVCS 를 활용 (프로젝트 이력들을 모두 받아옴)clone
: 원격 저장소를 로컬 저장소로 받아 오는 행위
init
: 로컬 저장소를 새롭게 시작하는 행위
git branch
git branch __브렌치 이름__
git branch -d __브렌치 이름__
git checkout __브렌치 이름__
git checkout -b __브렌치 이름__ # 브렌치 생성 및 이동
## 현재 디렉토리 경로 확인
(master) git merge __브렌치 이름__ # master 브렌치에 __브렌치 이름__을 병합시킴
branch
라는 폴더 이름 생성feature 브랜치 생성된 이후 master 브랜치에 변경 사항이 없는 상황
feature/test branch 생성 및 이동
git branch feature/test # Branch 생성
git branch # 목록 확인
git checkout feature/test
작업 완료 후 commit
touch test.txt
git add .
git commit -m 'Complete test'
git log --oneline
# feature/test Branch + **HEAD: 현재 있는 위치 정보**
5ff4709 (HEAD -> feature/test) Complete test
# master branch
c6f5db0 (master) Add README
master 이동
git checkout master
master에 병합
git merge feature/teset
# Fast-forward!!!
# master에 변경사항 없어서 그냥 앞으로!!!
결과 -> fast-foward (단순히 HEAD를 이동)
git log --oneline
# 5ff4709 (HEAD -> master, feature/teset) Complete test
branch 삭제
git branch -d feature/test
서로 다른 이력(commit)을 병합(merge)하는 과정에서 다른 파일이 수정되어 있는 상황; git이 auto merging을 진행하고, commit이 발생된다.
feature/data branch 생성 및 이동
git checkout -b feature/data
작업 완료 후 commit
touch data.txt
git add .
git commit -m 'Complete data'
git log --oneline
# (HEAD -> feature/data) Complete data
# 5ff4709 (master) Complete test
# c6f5db0 Add README
master 이동
git checkout master # Switched to branch 'master'
git log --oneline # c6f5db0 (HEAD -> master) Add README
master에 추가 commit 이 발생시키기!!
다른 파일을 수정 혹은 생성하세요!
touch hotfix.txt
git add .
git commit -m 'hotfix'
git log --oneline # (HEAD -> master) hotfix
master에 병합
git merge featrue/data
# Merge made by the 'recursive' strategy.
결과 -> 자동으로 merge commit 발생
vim 편집기 화면이 나타납니다. (vim: 터미널 용 문서 편집기 창)
자동으로 작성된 커밋 메시지를 확인하고, esc
를 누른 후 :wq
를 입력하여 저장 및 종료를 합니다.
w
: writeq
: quit커밋이 확인 해봅시다.
git log --oneline
# 44515f8 (HEAD -> master) Merge branch 'feature/data'
# 6930e34 hotfix
# 6b0245e (feature/data) Complete data
# 5ff4709 Complete test
# c6f5db0 Add README
그래프 확인하기
git log --oneline graph
* 44515f8 (HEAD -> master) Merge branch 'feature/data'
|\\
| * 6b0245e (feature/data) Complete data
* | 6930e34 hotfix
|/
* 5ff4709 Complete test
* c6f5db0 Add README
branch 삭제
git branch -d feature/data
# 가지 자체를 지우는 행위가 아니라, 가지의 정보가 없어짐
서로 다른 이력(commit)을 병합(merge)하는 과정에서 동일 파일이 수정되어 있는 상황; git이 auto merging을 하지 못하고, 해당 파일의 위치에 라벨링을 해준다.원하는 형태의 코드로 직접 수정을 하고 merge commit을 발생 시켜야 한다.
feature/web branch 생성 및 이동
git checkout -b feaeture/web
작업 완료 후 commit
# READE.md 파일 수정!!!
touch README.md
git add .
git commit -m 'Update README and Complete web'
master 이동
git checkout master
master에 추가 commit 이 발생시키기!!
동일 파일(README.md)을 수정 혹은 생성하세요!
# README 파일을 수정
git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git restore <file>..." to discard changes in working directory)
# modified: README.md
# no changes added to commit (use "git add" and/or "git commit -a")
git add .
git commit -m 'Update README'
master에 병합
git merge feature/web
# 충동을 고치고 결과를 커밋해야되네...
# CONFLICT (content): Merge conflict in README.md
# Automatic merge failed; fix conflicts and then commit the result.
# (master|MERGING)
결과 -> merge conflict발생
git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
new file: web.txt
# 어디서 충돌이 난건지 충돌 파일 확인 필요
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: README.md
충돌 확인 및 해결
# 해결전
<<<<<<< HEAD
# Project
* data 프로젝트
=======
# 프로젝트
* web 개발
>>>>>>> feature/web
# 해결후
# Project
* data 프로젝트
* web 개발
git add .
merge commit 진행
$ git commit
vim 편집기 화면이 나타납니다.
자동으로 작성된 커밋 메시지를 확인하고, esc
를 누른 후 :wq
를 입력하여 저장 및 종료를 합니다.
w
: writeq
: quit그래프 확인하기
git log --oneline --graph
* 1a08480 (HEAD -> master) Merge branch 'feature/web'
|\\
| * 156b027 (feature/web) Update README and Complete web
* | 30c71d2 Update README
|/
* 44515f8 Merge branch 'feature/data'
|\\
| * 6b0245e Complete data
* | 6930e34 hotfix
|/
* 5ff4709 Complete test
* c6f5db0 Add README
branch 삭제
git branch -d feature/data
git checkout -b 02 # branch 만든 후 작업
git add .
git commit -m 'Complete 02'
git push origin 02 # 원격 저장소에 있는 branch 02로 push
원본 저장소에서 Fork 뜨기 (저장소에 push 권한이 없으므로)
나의 github에서 해당 저장소 Clone
받기
init
명령어 쓰지 마세요!작업 후 나의 로컬 저장소에서 git push origin master
나의 github 저장소에서 Pull request 클릭
Create pull request 클릭 후 메세지 작성하면 THE END
commit 하기 전 할일 들 체크
$ git status
On branch master
# 커밋될 변경사항들
# Staging Area O
**Changes to be committed:**
(use "git restore --staged <file>..." to unstage)
# a.txt 삭제된...
**deleted: a.txt**
# 변경사항인데 Staging 아닌것
# Working Directory O
**Changes not staged for commit:**
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
# b.txt가 수정된...
**modified: b.txt**
# Untrack
# Working Directory O
**Untracked files:**
(use "git add <file>..." to include in what will be committed)
# 새로운 파일..
**c.txt**
untracked
: 한번도 git으로 관리된 적이 없거나 파일 생성 등
tracked
modified
modified
: 수정deleted
: 삭제unmodified
: git status
에 등장하지 않음
merge 하기 전 이력들을 체크
git restore --staged <file>
‼️ 커밋되지 않은 변경 사항을 없애는 것으로, 명령어를 실행한 이후 다시 돌이킬 수 없음
[참고] 커밋되어 있다면 다 살릴 수 있어요 🥳
# Working Directory에 있는 파일의 변경 사항을 버림
git restore <file>
‼️ 협업 시 역사를 바꾸려고 하지마라... 하늘이 노한다...
push
가 된 경우 절대 변경을 하지 않는다!git commit --amend
#vim
내용 수정
--hard
: 모든 작업 내용(변경사항)과 이력을 삭제 (매우 조심!!!)--mixed
: 모든 작업 내용(변경사항)을 Staging Area에 보관--soft
: Working Directory 내용까지도 보관$ git log --oneline
0c330b4 (HEAD -> master) Add f.txt
d81c176 작업끝
57ad4ef Status
fb4ad8d Add b.txt
ec0574d Add a.txt
$ git reset --hard d81c176
HEAD is now at d81c176 작업끝
$ git log --oneline
d81c176 (HEAD -> master) 작업끝
57ad4ef Status
fb4ad8d Add b.txt
ec0574d Add a.txt
$ git log --oneline
0c330b4 (HEAD -> master) Add f.txt
d81c176 작업끝
57ad4ef Status
fb4ad8d Add b.txt
ec0574d Add a.txt
$ git revert 0c330b4
Removing f.txt
[master 56ff1b7] Revert "Add f.txt"
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 f.txt
$ git log --oneline
56ff1b7 (HEAD -> master) Revert "Add f.txt"
0c330b4 Add f.txt
d81c176 작업끝
57ad4ef Status
fb4ad8d Add b.txt
ec0574d Add a.txt