티스토리 뷰
2021.01.28 로컬 브랜치, 원격 브랜치 삭제 명령어 추가
인프런 강좌 Country님의 실무자가 알려주는 Git - 입문편 강의와 교재를 참고하여 작성한 글입니다.
Git Lifecyle
- 간단히 add & commit(ci)
- add: 이 파일을 Git이 관리하게 하겠다 (or 수정 완료했다)
- commit: 이 파일을 Git에 저장하겠다
- Untracked
- Git과 아무 상관이 없는 상태
- 따라서 Git이 대상 파일을 관리하지 못함
- 최초
add
를 해줘야 Git의 관리 대상이 됨 - Git이 관리하는 파일을 삭제하면 Untracked가 됨
- Unmodified
- 코드 저장이 완료된 상태
- Staged 상태에서
commit
을 하면 Unmodified가 됨
- Modified
- Git으로 관리되고 있던 코드를 수정하여 변경이 일어난 상태
- Unmofieid 상태인 파일을 수정하면 Modified가 됨
commit
할 수 없음.commit
하려면 Staged 상태가 되야함
- Staged
- 이제 코드를 저장해도 좋다는(
commit
이 가능한) 상태 - Untracked/Modified 상태인 파일을
add
하면 Staged가 됨
- 이제 코드를 저장해도 좋다는(
이제 기본적인 명령어들을 설명할텐데 그전에 alias설정으로 인해 명령어들이 축약 돼 있는것을 확인해주시길 바랍니다. 즉, checkout명령은 co랑 같게 환경설정이 돼 있습니다.
기본적인 명령어들
status (st)
- 현재 git 상태를 보여줌.
- Untracked files :
Untracked
상태인 파일들-
cd ~/git-exer echo "status exer" >> st.md git st --- On branch master Untracked files: (use "git add <file>..." to include in what will be committed) st.md nothing added to commit but untracked files present (use "git add" to track)
-
- Changes to be committed:
Staged
상태인 파일들-
git add st.md git st --- On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: st.md
-
- nothing to commit, working tree clean:
Unmodified
상태인 파일들-
git ci -m 'Make st.md' git st --- On branch master nothing to commit, working tree clean
-
log (lg)
- 히스토리를 조회하는 명령어
- 커밋 단위로 히스토리가 쌓임
- log를 볼 줄 알아야 develop, release, hotfix 브랜치가 난무할 때 merge 방향이나 순서를 이해할 수 있음
- 위에 있는 것이 최신, 아래 있을 수록 예전 커밋
git lg
- ab118e1 - (73 minutes ago) Make st.md - Country
- e5d33ad - (2 days ago) initial commit - Country (origin/master)
add
- 파일을
Staged
상태로 만듦 -> 파일을 Git이 관리하는 상태로 만듦Untracked
/Modified
상태의 파일에 사용할 수 있음
- 이제
commit
을 하면 코드를 저장할 수 있음 Untracked
에서 진행-
echo "## Git class" >> index.md git st --- On branch master Untracked files: (use "git add <file>..." to include in what will be committed) index.md nothing added to commit but untracked files present (use "git add" to track)
git add index.md git st --- On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: index.md
-
Modified
에서 진행-
vi st.md git st --- Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: st.md
git add st.md git st --- On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: index.md modified: st.md
-
commit (ci)
- 파일을
Unmodified
상태로 만듦 -> 한 단위의 작업이 완료 - Git 시스템에 영구적으로 변경을 저장
- SHA-1 알고리즘을 적용한 해시값을 키로 생성.
- 히스토리가 하나 추가됨
- 실무에서 한 작업 (기능, 피처) 단위로 한 커밋 권장
-
git ci -m 'Modify files' --- [master 42298d3] Modify files 2 files changed, 2 insertions(+) create mode 100644 index.md
-
git st --- On branch master nothing to commit, working tree clean
-
git lg --- - 1e928bc - (20 seconds ago) Modify files - Country (HEAD -> master) - 51462d0 - (4 hours ago) Modify st.md - Country - ab118e1 - (4 hours ago) Make st.md - Country - e5d33ad - (2 days ago) initial commit - Country (origin/master)
옵션
-m
: 메시지를 넣음-a
:add
를 같이 함. 단순히 Modified-am
:-a
와-m
을 합친 것. 제일 많이 사용--amend
- 마지막 커밋을 수정
Stage
상태의 파일들과 같이 커밋됨- 만약
Stage
에 아무것도 없다면 (commit
이후에 작업을 안했으면) 커밋 메시지만 수정 -
git lg --- * 1e928bc - (5 minutes ago) Modify files - Country (HEAD -> master) * 51462d0 - (4 hours ago) Modify st.md - Country * ab118e1 - (4 hours ago) Make st.md - Country * e5d33ad - (2 days ago) initial commit - Country (origin/master)
-
git ci --amend --- [master 69e0e26] Rewrite commit message Date: Mon Mar 9 23:32:31 2020 +0900 2 files changed, 2 insertions(+) create mode 100644 index.md
-
git lg --- * b0c729f - (6 minutes ago) Rewrite commit message - Country (HEAD -> master) * 51462d0 - (4 hours ago) Modify st.md - Country * ab118e1 - (4 hours ago) Make st.md - Country * e5d33ad - (2 days ago) initial commit - Country (origin/master)
branch (br)
- 커밋 사이를 가볍게 이동할 수 있는 어떤 포인터 같은 것 (3.1 Git 브랜치 - 브랜치란 무엇인가 )
- 하나의 작업 공간 단위 정도로 생각
- 브랜치 확인:
git br
- 브랜치 생성:
git br test/1
- 브랜치 삭제:
git br -D test/1
branch 전략
Git branch 전략 (Git Flow)
- master
- git init하면 생기는 태초의 브랜치
- 배포 가능한, 말그대로 master 브랜치
- 보통 태그를 따서 태그로 배포함
- develop
- 보통 작업할 때 기준이 되는 브랜치.
- 개발 서버에도 평소에는 develop 기준으로 배포하며 테스트 함
- 생성 위치:
master
(태초)
- hotfix
- 서비스에 문제가 생기거나 갑자기 무언가 고쳐서 배포해야 할 때 사용
- 생성 위치:
master
(그렇지 않으면 다른 작업들이 딸려 나감) - merge:
master
&develop
- feature
- 실제로 뭔가 기능(feature)를 만드는 브랜치
- 생성 위치:
develop
- merge:
develop
(code reivew)
- release
- 새로운 기능들을 추가하여 배포하기 위한 브랜치
- 생성 위치:
develop
- merge:
master
&develop
- 다른 Git branch 전략들도 있음
- GitHub Flow, Release Flow ...
- 참고: https://newsignature.com/articles/git-branching-strategies-which-one-should-i-pick/
HEAD
- 지금 작업하는 로컬 브랜치를 가리키는 포인터 (3.1 Git 브랜치 - 브랜치란 무엇인가)
- 현재 브랜치 마지막 커밋의 스냅샷
- branch를 변경하면 해당 브랜치의 마지막을 가리키고 있음
- HEAD를 움직이면서 여러 버전의 코드들을 볼 수 있음
checkout (co)
- 다른 브랜치로 이동
- 옵션
-b
: 브랜치 생성하고 그 브랜치로 checkout- 아래 두 명령은 같음
git co -b develop
-
git br develop git co develop
-
git co master
checkout TIP
- 커밋의 hash값을 알면 시간 여행이 가능함
-
git lg --- * b0c729f - (3 hours ago) Rewrite commit message - Country (HEAD -> master) * 51462d0 - (6 hours ago) Modify st.md - Country * ab118e1 - (7 hours ago) Make st.md - Country * e5d33ad - (2 days ago) initial commit - Country (origin/master)
-
git co e5d33ad --- Note: checking out 'e5d33ad'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at e5d33ad initial commit
-
git lg --- * b0c729f - (3 hours ago) Rewrite commit message - Country (master) * 51462d0 - (6 hours ago) Modify st.md - Country * ab118e1 - (7 hours ago) Make st.md - Country * e5d33ad - (2 days ago) initial commit - Country (HEAD, origin/master)
push
- 로컬 브랜치의 정보를 원격 저장소로 업로드
- Clone 한 리모트 저장소에 쓰기 권한이 있어야 함
- 같은 브랜치로 여러명이 받아서 누군가 push를 했다면 나는 push 안됨
- 다른 사람이 작업한 것을 가져와서 합친 후에 (Merge or Rebase) Push 할 수 있음
-
git co master git push [origin] [master]
- 옵션
--force
(-f
)- 내 로컬 브랜치로 원격 브랜치를 덮어 씌워버림
- 내가 혼자 작업하던 feature 브랜치에서만 사용해야함
- 시나리오: 누군가 악의적으로 master브랜치를 망가뜨린다면?
pull, fetch
- Clone 한 서버에서 데이터를 가져오고, 그 데이터를 자동으로 현재 작업하는 코드와 Merge (2.5 Git의 기초 - 리모트 저장소 )
fetch
: 서버에서 데이터만 가져오고 자동으로 코드를 합치지는 않음-- 새로운 디렉토리 cd ~ mkdir git-other cd git-other git clone 'https://github.com/HwangNara/git-exer.git' cd git-class vi README.md git ci -am 'Modify README.md' git push
-
-- 원래 디렉토리 git pull
pull & push 실습
- 환경: master에서 딴 test 브랜치 / 2개의 터미널
- 내용
- fetch vs. pull
- pull 충돌 실험
- branch 삭제
branch 삭제 명령어
Local
git br -D [브랜치 name]
remote 브랜치 삭제 명령어
git push origin --delete [브랜치 name]
- 추가 명령어
- 파일 변경 내용 보기:
git diff
- 리모트의 브랜치 삭제:
git push origin --delete {branch명}
- 삭제된 리모트 브랜치를 로컬에도 반영:
git fetch -p
- 파일 변경 내용 보기:
728x90
반응형
'TIL(Today I Learn) > Git' 카테고리의 다른 글
[git] VSCode에서 vi모드 해제(pager, vim, log) (0) | 2022.08.09 |
---|---|
[Git] 2. Github에 코드 올리고 Clone 하기 (0) | 2020.12.13 |
[Git] 1. Git이란? (0) | 2020.12.13 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 프로그래머스 코딩테스트
- vscode
- JS
- 프로그래머스 카카오
- JavaScript
- 마크다운 이미지 업로드
- 42seoul
- Git
- vscode commit vi
- c언어알고리즘
- 알고리즘
- git vi
- C언어 문제
- 자바스크립트
- css
- React
- 프로그래머스 자바
- c언어 함수
- 42서울
- 42서울 합격 후기
- 42서울 라피신
- windows 10 ubuntu
- html
- 프로그래머스 코테
- C언어
- 백준
- HEXO
- C언어문제
- flexbox
- 42서울 합격
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함