[Git] 기본명령어 및 활용
Git 명령어
오늘은 Git 명령어
에 대하여 알아보겠습니다.
기본적인 명령어와 시나리오를 통해 충동상황을 인위적으로 만들어보고 해결해보는 방법으로 알아보겠습니다.
git branch 확인
$ git branch
* master
git branch 생성
$ git branch hellobranch
$ git branch
hellobranch
\* master
git 특정 branch 로 이동
$ git checkout hellobranch
'hellobranch' 브랜치로 전환합니다
git branch에서 commit
$ git touch hellobranch.md
$ git add .
$ git commit -m 'hellobranch'
[hellobranch 38888aa] hellobranch
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hellobranch.md
git master 에서 확인
$ git checkout master
'master' 브랜치로 전환합니다
폴더를 확인하면 branch
에서 생성한 hellobranch.md
파일을 확인할 수 없습니다.
git merge
Branch 에서 작업한 내용을 master에 적용하고 병합하기 위하여
$ git merge hellobranch
git branch 삭제
$ git branch -d {브랜치 이름}
$ git branch -d hellobranch
hellobranch 브랜치 삭제 (과거 38888aa).
$ git branch
* master
git branch 생성 및 이동
$ git checkout -b {브랜치 이름}
$ touch blog.html
$ git add .
$ git commit -m 'Complete blog app'
$ git log --oneline
$ git log --oneline --graph
기타 명령어
restore
작업공간(working directory)의 변경 사항을 버린다.
$ 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: CLI.txt
no changes added to commit (use "git add" and/or "git commit")
$ git restore CLI.txt
-
--staged
옵션을 활용하면, staging area를 취소(add
명령어의 반대)$ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: CLI.txt
$ git restore --staged CLI.txt $ 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: CLI.txt no changes added to commit (use "git add" and/or "git commit -a")
커밋 메시지 변경
$ git commit --amend
-
vim 편집기가 실행된다.
-
i
: 편집 모드로 변경되어서 메시지 변경 가능 -
esc
+:wq
: 저장하고 종료 -
주의!! 공개된 커밋은 절대 변경 금지.
$ git log --oneline 00a6259 (HEAD -> master) TEest f7dc503 First commit $ git commit --amend [master 4d42f0f] Test Date: Fri Aug 21 16:17:42 2020 +0900 1 file changed, 1 insertion(+) $ git log --oneline 4d42f0f (HEAD -> master) Test f7dc503 First commit
-
커밋시 특정 파일을 빠트린 경우 아래와 같이 활용할 수 있다.
$ git add omit.html $ git commit --amend
-
reset vs revert
-
revert
: 되돌렸다는 커밋이 발생된다.$ git revert 특정시점 $ git log --oneline 520c668 (HEAD -> master) Revert "Add 3 files" 8a97ad4 Add 3 files 4d42f0f Test f7dc503 First commit
-
reset
: 커밋 자체를 지운다. (원격저장소에 공개된 이력의 경우 주의!)$ git reset 특정시점 $ git log --oneline 4d42f0f (HEAD -> master) Test f7dc503 First commit
-
--mixed
: 기본 설정
- 해당 커밋 이후 변경사항을 staging area 내용 보관
-
--hard
- 해당 커밋 이후 변경사항을 모두 삭제
-
--soft
- 해당 커밋 이후 변경사항 및 working directory 내용 보관
-
Git 시나리오
상황 1. fast-foward
fast-foward는 feature 브랜치 생성된 이후 master 브랜치에 변경 사항이 없는 상황
-
feature/test branch 생성 및 이동
$ git checkout -b feature/test
-
작업 완료 후 commit
$ touch test.html
-
master 이동
$ git checkout master
-
master에 병합
$ git merge feature/test
-
결과 -> fast-foward (단순히 HEAD를 이동)
-
branch 삭제
$ git branch -d feature/test
상황 2. merge commit
서로 다른 이력(commit)을 병합(merge)하는 과정에서 다른 파일이 수정되어 있는 상황
git이 auto merging을 진행하고, commit이 발생된다.
-
feature/poll branch 생성 및 이동
git checkout -b feature/poll
-
작업 완료 후 commit
$ touch poll.html $ git add . $ git commit -m 'complete blog app'
-
master 이동
$ git checkout master
-
master에 추가 commit 이 발생시키기!!
- 다른 파일을 수정 혹은 생성하세요!
$ touch poll.css $ git add . $ git commit -m 'update poll.css'
-
master에 병합
(master) $git merge feature/poll
-
결과 -> 자동으로 merge commit 발생
-
vim 편집기 화면이 나타납니다.
-
자동으로 작성된 커밋 메시지를 확인하고,
esc
를 누른 후:wq
를 입력하여 저장 및 종료를 합니다.w
: writeq
: quit
-
커밋이 확인 해봅시다.
-
-
그래프 확인하기
$git log --oneline --graph \* 43a7747 (**HEAD ->** **master**) Merge branch 'feature/poll' |\ | * b2dcf72 (**feature/poll**) complete blog app \* | bacdf1a update poll.css |/ \* d9ccd8f Complete blog app \* 38888aa hellobranch \* 5e8b5fb init
-
branch 삭제
$ git branch -d feature/poll
상황 3. merge commit 충돌
서로 다른 이력(commit)을 병합(merge)하는 과정에서 동일 파일이 수정되어 있는 상황
git이 auto merging을 하지 못하고, 해당 파일의 위치에 라벨링을 해준다.
원하는 형태의 코드로 직접 수정을 하고 merge commit을 발생 시켜야 한다.
-
feature/board branch 생성 및 이동
$ git checkout -b feature/board
-
작업 완료 후 commit
-
Readme 파일 수정 후 아래 명령어
$ touch board $ git add . $ git commit -m 'edit readme and board'
-
-
master 이동
$ git checkout master
-
master에 추가 commit 이 발생시키기!!
-
동일 파일을 수정 혹은 생성하세요!
-
readme .md 수정!
$ git add . $ git commit -m 'edit readme and board'
-
-
master에 병합
$ git merge feature/board 자동 병합: readme.md 충돌 (내용): readme.md에 병합 충돌 자동 병합이 실패했습니다. 충돌을 바로잡고 결과물을 커밋하십시오.
-
결과 -> merge conflict발생
admin@adminui-MacBookPro Django % git status 현재 브랜치 master 병합하지 않은 경로가 있습니다. (충돌을 바로잡고 "git commit"을 실행하십시오) (병합을 중단하려면 "git merge --abort"를 사용하십시오) 커밋할 변경 사항: 새 파일: board.html 병합하지 않은 경로: (해결했다고 표시하려면 "git add <파일>..."을 사용하십시오) 양쪽에서 수정: readme.md
-
충돌 확인 및 해결
중복되었을때 둘다 표시도 가능하고 하나만 선택하는 것이 가능 (vs, pycharm에서 선택가능)
-
merge commit 진행
$ git commit
-
vim 편집기 화면이 나타납니다.
-
자동으로 작성된 커밋 메시지를 확인하고,
esc
를 누른 후:wq
를 입력하여 저장 및 종료를 합니다.w
: writeq
: quit
-
커밋이 확인 해봅시다.
-
-
그래프 확인하기
$ git add . $ git commit -m 'resolveconflict' [master 4a75bda] resolveconflict $ git log --oneline --graph * 4a75bda (HEAD -> master) resolveconflict |\ | * d7040c2 (feature/board) edit readme and board * | eb7b350 edit_readme_master |/ * 43a7747 Merge branch 'feature/poll' |\ | * b2dcf72 complete blog app * | bacdf1a update poll.css |/ * d9ccd8f Complete blog app * 38888aa hellobranch * 5e8b5fb init
-
branch 삭제
$ git branch -d feature/board
Leave a comment