Git-4) Git 명령어의 사용법
이 글에선 Git의 사용법에대하여 설명을 할 예정이다.
Git의 Pository별 주요 기능과 명령어들에 대하여 서술할 예정이니 실습하며 따라와보자
먼저 학습은 2개로 나누어져 진행될 예정이다.
이해하기 편하도록 크게 2개의 목차로 나눈것이니 참고하면 좋을것 같다.
목차는 아래에 해당한다.
- Local Repository 에서 작업할때(오프라인 상에서 작업)
- Remote Repository 에서 작업할때(작업한것들을 서버에 연동)
아래 이미지는 Git의 전체 흐름, Local에서의 작업 흐름, Remote(Server)에서의 작업 흐름 별로
이미지를 정리해 두었다 글을 읽다 이해 되지 않는 부분에 돌아와서 참고 하면 많은 도움이 될것이다.
이미지 확인하기
![]() |
|
![]() |
🢀 Git의 전체 흐름도 |
![]() |
🢀 Local에서의 작업 흐름도 |
![]() |
🢀 Remote에서의 작업 흐름도 |
step 0 - 준비하기
일단 시작하기 앞서 준비해둬야할것이 몇개가 있다.
- Git
- Git Hub 계정
- Git이 지원되는 IDE(통합 개발 환경)
{ ex - eclipse, Visual Studio, VS Code, Android Studio 등)
만약 준비되지 않은것들이 있다면 아래 링크를 참고하여 준비하고 오자!
필자는 Visual Studio Code(IDE)를 통해 작업을 진행할 예정이다.
각자 자신이 해당하는 IDE를 사용하여 진행하자!
혹 아직 사용중인 IDE가 없다면 일단 Visual Studio Code를 사용해서 따라해보자
Step 1 - Local Repository와 작업하기
1. 주된 작업
Local Repository에서의 주 기능은 개인이작업을 하는것에 맞춰져 있다.
Branch(분기점)을 만들거나 변경사항을 Add/Commit(기록) 하는 작업들을 수행한다.
뿐만 아니라 언제든 원하는 시점으로 Checkout/Revert(이동)하거나 Diff(비교)하는등
작업중 문제 해결에 도움이 되는 역할을 한다.
2. 명령어와 역할
1. Local Repository 설정하기
> $ git init
명령어를 실행한 폴더를 Local Repository로 지정 Git 작업에 필요한 .git 폴더를 생성해준다.
2. 작업파일 관리하기
$ git status
> $ git status
Git의 상태를 조회하는 명령어 이다.
몇개의 Commit이 존재하는지, 어떤파일이 index에 Staging 되어있는지, 새로 생긴 파일이 있는지등
전반적인 git의 파일들의 상태를 조회할수 있다.
$ git add
> $ git add
commit되지 않은 파일들을 옵션에 따라 선택하여 파일들의 변경사항을 Index에 Staging한다.
$ git add 옵션 | |
$ git add -A | 모든 파일의 모든 변경사항(new, modify, delete)을 staging에 반영한다 |
$ git add . |
현재경로 하위에있는 파일들의 모든 변경사항(new, modify, delete)을 staging에 반영한다 [.gitignore파일에 있는 파일은 제외] |
$ git add * | 현재경로 하위에있는 파일들의 변경사항(new, modify)을 staging에 반영한다 |
$ git add -u |
현재경로 하위에있는 파일들의 변경사항(modify)을 staging에 반영한다 [새로생긴 파일은 신경쓰지 않는다.] |
$ git add -p | 변경사항을 하나씩 보며 골라서 Staging 할 수 있다. |
$ git add [파일명] | [파일명]에 해당하는 파일을 staging 할 수 있다. |
$ git add [파일 경로] | [파일 경로]에 있는 파일을 staging 할 수 있다. |
$ git commit
> $ git commit
Index에 Staging되어있는 파일들을 기록하여 스냅샷으로 남기는 행위이다.
commit을 해줘야 비로서 제대로 저장이 되었다 볼수 있다.
$ git commit 옵션 | |
$ git commit -m "메시지" | index에 Staging되어있는 모든파일을 "메세지"내용을 붙여 Commit함 |
$ git commit -a |
모든 변동사항이있는 파일을 add 없이 한번에 커밋함 [git add -A + git commit 을 합친 명령어] |
$ git commit -am "메시지" $ git commit -a -m "메시지" |
변동사항이 있는 모든파일을 "메세지"내용을 붙여 Commit함 [git add -A + git commit -m"" 을 합친 명령어] |
$ git --amand $ git --amand -m "메시지" $ git --amand --no-edit |
index에 Staging내용으로 가장 최근에 작성한 commit을 수정함 [ -m "메시지" : 에디터로 넘어가지 않고 commit 메시지를 "메시지"로바꾸고 바로 수정] [--no-edit : 메시지 수정 없이 진행] |
$ git stash
> $ git stash
아직 작업이 완료되지 않아 commit하기 애매하지만 저장이 필요한 경우 사용하는 임시저장소 이다.
Working Directory뿐만아니라 Index안에 있는 파일들과 상태도 저장이 가능하다.
$ git stash 옵션 | |
$ git stash $ git stash save |
새로운 stash를 만들어 git이 tracking중인 파일을 스택에 저장한다. |
$ git stash -u | 새로운 stash를 만들어 모든파일(tracking, Untracking) 파일을 스택에 저장한다. |
$ git stash -k | index안에 있는(add로 Staging된 파일)변경사항은 포함하지 않고 임시 저장하기 |
$ git stash list | 스택에 쌓여있는 stash파일을 조회한다. |
$ git stash pop $ git stash pop "[stash이름]" --index $ git stash pop --index |
스택에 쌓여있던 맨위 Stash를 불러오고 해당 stash는 삭제한다. [ [stash이름] : stash이름에 해당하는 stash를 불러오고 해당 stash는 삭제한다. (이름Ex : Stash{n} )] [--index : index에 Staging되어있던 상태까지 불러온다 -- stash이름이 없어도 작동된다.] |
$ git stash apply $ git stash apply "[stash이름]" $ git stash apply "[stash이름]" --index |
스택에 쌓여있던 맨위 Stash를 불러온다. [ [stash이름] : stash이름에 해당하는 stash를 불러온다 (이름Ex : Stash{n} )] [--index : index에 Staging되어있던 상태까지 불러온다. -- stash이름이 없어도 작동된다.] |
$ git stash drop $ git stash drop "[stash이름]" |
스택에 쌓여있던 맨위 Stash를 삭제한다. [ [stash이름] : stash이름에 해당하는 stash를 삭제한다 (이름Ex : Stash{n} )] |
$ git stash branch [브랜치 이름] $ git stash branch [브랜치 이름] "[stash이름]" |
stash에 있는 내용을 바로 새로운 브랜치 [브랜치 이름]으로 만들어 냅니다. [ [stash이름] : stash이름에 해당하는 stash로 브랜치를 생성한다. (이름Ex : Stash{n} )] |
$ git stash show $ git stash show "[stash이름]" |
stash의 변경내용을 보여줌 |
$ git stash clear | 모든 임시 변경사항(stash)을 삭제 |
- 팁! Apply로 꺼낸 임시 변경사항을 적용전으로 되돌리기
$ git stash show -p (or) $ git stash show -p "[stash이름]"
$ git apply --reverse
위 사항은 스텍안에 stash가 남아있어야만 적용이가능하다.
만약 Apply 했던 stash를 삭제했고 Head까지 돌아가도 상관없다면 아래 명령어를 사용하자.
$ git checkout -f
3. 커밋 관리하기
$ git log
> $ git log
해당 Git의 Histort를 보여주는 명령어. 스페이스바나 방향키를 누르면 다음줄이 나온다.
기본적으로 Commit의 SHA-1 해쉬섬, Commit한 유저의 이름과 Email, 날짜, 메시지 순으로 보여준다.
[Commit의 SHA-1 해쉬섬 - 데이터 오류를 체크하거나 파일을 특정 할수있는 있는 문자열]
$ git log 표시 옵션 | |
$ git log --oneline |
Commit이력을 Commit Id(해쉬섬의 6자리)와 Commit메세지로만 표시한다. [$ git log --pretty=oneline과 햇갈릴수 있는데 pretty=oneline은 해쉬섬 전체를 표시한다.] |
$ git log --name-only | Commit이력에 수정된 파일목록을 추가해준다 |
$ git log --decorate | git log에 태그정보를 포함하여 표시한다. |
$ git log -p $ git log -p --word-diff |
commit이력에 수정된 파일 목록과 수정내용을 전부 보여준다(diff) [--word-diff옵션을 추가하면 diff를 줄단위로 보여주는것이아닌 단어단위로 변경사항을 표시해준다.] |
$ git log --stat $ git log --shortstat |
어떤파일이 수정되었고 얼마나 많이 변경되었는지 파일의 상태를표시해주는 내용을 . [stat 내용중에서도 수정한 파일, 추가된 라인, 삭제된 라인만 보여준다.] |
$ git log --graph | Commit이력에 Branch와 Merge의 히스토리를 보여주는 아스키 그래프를 추가한다. |
$ git log --pretty=oneline $ git log --pretty=short $ git log --pretty=full $ git log --pretty=fuller $ git log --pretty=format:"[포멧]" |
git log의 기본 표시 범위를 바꿔준다. -------------------------------------- oneline : 해쉬섬과 메시지만 표시 short : 해쉬섬과 메시지, 작성자만 표시 full : 해쉬섬과 메시지, 작성자, 커밋터만 표시 fuller : 해쉬섬과 메시지, 작성자, 작성일, 커밋터, 커밋일 표시 format : 자신이 원하는 형태대로([포맷]) 설정하여 표시할수 있다. |
$ git log --pretty=format 표시 옵션 펼처보기
$ git log --pretty=format 표시 옵션 | |||
%H | 커밋 해시 | %h | 짧은 길이 커밋 해시 |
%T | 트리 해시 | %t | 짧은 길이 트리 해시 |
%P | 부모 해시 | %p | 짧은 길이 부모 해시 |
%an | 작성자 이름 | %ae | 작성자 메일 |
%ad | 작성 시각 (형식은 –date= 옵션 참고) | %ar | 작성 상대적 시각 (Ex : 2days ago) |
%cn | 커미터 이름 | %ce | 커미터 메일 |
%cd | 커밋한 시각 | %cr | 커밋한 상대적 시각 (Ex : 2days ago) |
%s | 요약 |
$ git log 검색 옵션 | |
$ git log -- 파일경로 | 특정 파일의 변경 커밋 조회 |
$ git log -n | 최근 n 개의 커밋만 조회한다. |
$ git log --since=[기간] $ git log --after=[기간] |
명시한 날짜 이후의 커밋만 검색한다. [기간 포멧 : n.year, n.month, n.week, n.day, n.hour, n.minute, "yyyy-mm-dd" ] |
$ git log --before=[기간] $ git log --until=[기간] |
명시한 날짜 이전의 커밋만 조회한다. [기간 포멧 : n.year, n.month, n.week, n.day, n.hour, n.minute, "yyyy-mm-dd" ] |
$ git log --before=[기간] | n.year/month/week/day/hour/minute, "yyyy-mm-dd" |
$ git log --author '[닉네임]' | 입력한 저자의 커밋만 보여준다. |
$ git log --committer '[닉네임]' | 입력한 커미터의 커밋만 보여준다. |
$ git log --grep '[텍스트]' | 커밋 메시지 안의 텍스트를 검색한다. |
$ git log -S '[텍스트]' | 커밋 변경(추가/삭제) 내용 안의 텍스트를 검색한다. |
$ git reset
> $ git reset
자신이 지정한 commit시점으로 되돌아가는 명령어이다.
실행되고나면 지정시점 이후의 commit은 사라진다.
$ git reset 옵션 | |
$ git reset --soft [커밋 해쉬섬 or ID] | Head만 [커밋 해쉬섬 or ID]으로 돌아간다 |
$ git reset [커밋 해쉬섬 or ID] $ git reset --mixed [커밋 해쉬섬 or ID] |
Head와 Index가 같이 [커밋 해쉬섬 or ID]로 돌아간다. |
$ git reset --hard [커밋 해쉬섬 or ID] | Head, Index, Woring Directory까지 전부 [커밋 해쉬섬 or ID]로 돌아간다. |
- 팁1) 첫 commit에서 상대순으로 돌아가고 싶을때
만약 첫 commit에서 상대순으로 돌아가고 싶다면 아래 처럼 입력해주면된다.
$ git reset HEAD^ // 1번째 전의 커밋으로 돌아감
$ git reset HEAD~n // n번쨰 전의 커밋으로 돌아감
- 팁2) reset을 잘못했거나 merge후 다시 돌리고 싶을때
git에선 되돌릴수 없는 실수를 했을때(merge, pull, reset)되돌릴수있도록 ‘ORIG_HEAD’라는 이름으로 이력을 남긴다.
$ git reset --hard 'ORIG_HEAD' // 위 작업을 시행했다 돌리고 싶다면 실행해보자
- 팁3) 파일들을 수정 전으로 돌리고 싶을때
HEAD 포인터를 사용하여 돌아가면 자신의 현재 작업내용을 지운 가장 최근의 커밋으로 갈수 있다.
$ git reset --mixed HEAD // INDEX 돌아가기
$ git reset --hard HEAD // INDEX & WorkingDirectory 돌아가기
$ git revert
> $ git revert
과거의 시점으로 돌아가고싶지만 commit기록을 남겨놔야할경우 사용한다.
기존 커밋에서 돌아가기보단 과거에 있는 커밋을 현재의 기록 앞에 덮어쓴다고 생각하면 편하다.
$ git revert [커밋 해쉬섬 or ID] --mainline 2
$ git revert ORIG_HEAD --mainline 2
또한 위와 같은 명령어로 자신이 merge하기전 원하는 분기점을 불러올수도 있다.
$ git diff
> $ git diff
git diff는 비교하는 명령어 이다.
원하는 시점끼리 비교하여 어떤점이 변경되었는지 파악하기 편하게 해준다.
$ git diff 옵션 | |
git diff | Index와 WorkingDirectory를 비교해준다 |
git diff [변경전] [변경후] | []입력 가능한것들 : 브랜치명, 해쉬섬, 상대참조(HEAD~{n})[변경후]의경우 현재(HEAD)와 비교할시 생략가능 |
git diff [변경전] [변경후] --[옵션] | [변경전]에서 [변경후]의 변경점을 옵션을 적용해 알려준다. |
git diff --"[파일 경로]" | 해당 파일의 변경점만을 보여준다 |
git diff --stat | 파일의 변경점을 내용이아니라 수치로 보여준다 |
git diff --name--only | 변경된 파일명만만 보여준다 |
git diff -w | 변경점에서 개행 코드나 공백을 무시한다 |
git diff --ignore-blank-lines | 변경점에서 개행은 무시한다. |
git diff -U0 | 변경점의 전후에 표시되는 행의 수를 변경한다 |
git diff --color-words | 단어 단위로 비교하여 보여준다 |
git diff --cached git diff --staged |
Head(가장최근 커밋)와 Index안에 내용을 비교한다 |
$ git tag
> $ git tag
commit이나 Branch에 별명을 지어 간략하게 찾아보거나 특별한 객체등을 만들어 기록할수 있는기능이다
메시지등을 달아두어 구분하기 편하게 마킹해줄수 있다.
$ git tag 옵션 | |
$ git tag -l "[검색어]" $ git tag --list "[검색어]" |
태그 리스트를 보여줍니다. [만약 검색어를 적지 않았으면 전체 태그를 보여줍니다] [또한 검색어에선 와일드카드(*)를 사용할 수 있습니다] |
$ git tag [태그명] [해쉬섬 or 브랜치명] |
lightweight태그를 생성합니다 지정 커밋의 포인터 역할만을 수행합니다 [해쉬섬을 적지 않을경우 가장 최근commit(HEAD)를 지정합니다] |
$ git tag -a [태그명] [해쉬섬 or 브랜치명] |
annotated 태그를 생성합니다. 해당 태그는 하나의 객체로 저장됩니다. 태그한 사람의 이름, E-mail, 날짜, 태그메시지등을 더할수 있습니다 [해쉬섬을 적지 않을경우 가장 최근commit(HEAD)를 지정합니다] |
$ git tag -a [태그명] -m "[태그 메시지]" [해쉬섬 or 브랜치명] | annotated 태그에 원하는 [메시지]를 첨부합니다. [해쉬섬을 적지 않을경우 가장 최근commit(HEAD)를 지정합니다] |
$ git tag -d [태그명] $ git tag --delete [태그명] |
원하는 태그를 삭제합니다. |
$ git tag -a [새 태그명] [원래 태그명]^{} -m "[새 메시지]" $ git tag -d [원래 태그명] |
annotated 태그를 수정할때는 새로운 태그를 만들고 예전 태그는 삭제하는식으로 수정합니다. [^{}은 태그가 아닌 객체를 명시해줍니다 ] [lightweight태그는 지우고 다시 만들어줘야합니다.] |
$ git tag 관련 옵션 | |
$ git show [태그명] | 태그의 세부정보를 검색합니다. |
$ git show-ref --tags | 태그목록과 해쉬섬을 동시에 검색합니다 |
$ git ls-remote --tags | 원격 저장소 태그를 검색합니다. |
$ git push [원격저장소] [태그명] | 원격 저장소에 원하는 태그를 push합니다. |
$ git push origin --tags | 원격 저장소에 전체 태그를 push합니다. |
$ git push [원격저장소] -d [태그명] $ git push [원격저장소] --delete [태그명] |
원격저장소에서 태그를 삭제 합니다. |
$ git show
> $ git show
commit 정보를 조회할수있는 명령어 입니다. Commit 해시값, commit 메세지, 수정된 파일 목록, 변경 내용 등을 확인할 수 있습니다. commit해쉬, tag, HEAD등을 뒤에 붙여 검색할수 있습니다.
4. 브랜치 관리하기
$ git branch
> $ git branch
git branch는 git의 Branch들을 관리, 생성, 삭제하는 명령어이다.
$ git branch 옵션 | |
$ git branch | 브랜치 목록을 보여준다. |
$ git branch -v | 브랜치 목록을 가장 최근의 commit 과 같이 보여준다. |
$ git branch -r | Remote Repository(원격저장소)의 브랜치 목록을 보여준다. |
$ git branch -a | Remote Repository(원격저장소)와 Local Repository(로컬저장소)의 브랜치 목록을 보여준다. |
$ git branch [브랜치명] [commit] |
[브랜치명]의 새 브랜치를 생성한다. [commit]은 생략해주면 현재 위치에서 생성된다. |
$ git branch --merged $ git branch --no-merged |
--merged : 이미 merge가 진행된 브랜치를 보여준다 --no-merged 아직 merge가 진행되지 않은 브랜치를 보여준다. |
$ git branch -d [브랜치명] $ git branch -D [브랜치명] |
병합이 끝난 [브랜치명]을 삭제한다. [만약 아직 merge를 진행하지 않은 브랜치라면 삭제되지 않습니다.] 브랜치를 강제 삭제한다. [-d 옵션으로 삭제되지 않는 브랜치를 지울때 사용] |
$ git branch -m [새 브랜치명] [브랜치명] $ git branch -M [새 브랜치명] [브랜치명] |
새브랜치명으로 브랜치를 변경한다. 새브랜치명이 존재한다면 강제로 덮어씌워 브랜치를 변경한다. |
$ git checkout
> $ git checkout
git checkout은 자신이 원하는 지점(branch, commit)으로 이동하게 해주는 명령어이다.
사용시 해당지점으로 Working Directory의 모든 내용이 변경된다.
$ git checkout 옵션 | |
$ git checkout [브랜치명] | [브랜치명]의 최신 커밋으로 이동한다. |
$ git checkout [해쉬섬] |
해쉬섬에 해당하는 commit내용으로 분리된 HEAD를 생성한다. |
$ git checkout -- | 파일 변경사항을 index안에 있는 내용으로 되돌리기 |
$ git checkout HEAD | 파일 변경사항을 가장 최근 commit으로 되돌리기 |
$ git checkout FETCH_HEAD | git fetch를 통해 fetch를 받았다면 FETCH_HEAD로 이동한다 |
$ git checkout [리모트 저장소/리모트브랜치] | [리모트 저장소]에있는 [리모트 브랜치]로 이동한다 |
$ git checkout -b [브랜치명] [이동할 위치] | [브랜치명]의 브랜치를 생성하고 [브랜치명]으로 checkout 한다 |
$ git checkout -b [브랜치명] [이동할 위치] |
[이동할 위치] 지점으로 이동하며 [브랜치명]의 브랜치를 생성한다 (이동할 위치에 브랜치명, FETCH_HEAD, 해쉬섬, 태그, 리모트 저장소/리모트 브랜치 사용가능) |
$ git checkout -b FETCH_HEAD | FETCH_HEAD라는 이름으로 자동 생성됨 |
$ git checkout --track [리모트 저장소/리모트브랜치] $ git checkout -t [리모트 저장소/리모트브랜치] |
[리모트 저장소/리모트브랜치]해당 브랜치를 추적한다 (업스트림 브랜치로 설정되고 해당브랜치로 checkout된다.) |
용어 설명 - 분리된 HEAD 란?
분리된 HEAD란 git의 Branch에 속하지않은 독자적인 commit으로 checkout시 사라진다.
만약 이 commit을 수정하고 merge하고 싶다면 Branch를 생성하여야한다.
checkout한 직후 분리된 HEAD로 돌아갈려면 $ git checkout HEAD@{1}을통해 되돌아갈 수 있고,
$ git reflog 통해 HEAF@{n}을 찾아 돌아갈수 있다.
용어 설명 - UpStream Branch(업스트림 브랜치) 란?
업스트림브랜치란 local repository와 연결된 브랜치이다.
해당 브랜치에서 pull과 push를 받는다.
- 팁) $ git checkout --[파일명]
해당 명령어를 통해 원하는 파일을 원하는 시점으로 변경할 수 있다.
$ git checkout --[옵션] --[브랜치명] --<[파일명]> // 서식
$ git checkout --<[파일명]> // index안에 있는 내용으로 [파일명]을 변경한다.
$ git checkout HEAD --<[파일명]> // 가장 최근 commit안의 내용으로 [파일명]변경한다.
$ git checkout FETCH_HEAD --<[파일명]> // Fetch안에 있는 내용으로 [파일명]을 변경한다.
$ git merge
> $ git merge
git merge는 분리되어있는 Branch를 하나의 줄기로 합치는 명령어이다.
상황에 따라 Branch를 합치거나 정리하는 식으로 프로젝트의 다양한 버전의 변화를 실험하기 좋다.
$ git merge의 종류 | |
![]() |
![]() |
git merge는 위와같이 2종류가 존재한다.
이를 각각 간단히 아래쪽에 설명 해두었다.
- Fast-Forward : branch가 갈라지지 않고 꺽여있기만 한상태, (merge시 줄기가 한줄로 정렬된다)
- Typical(일반적) : branch가 갈라져 여러 줄기로 나뉘어진 경우, (merge시 줄기가 한줄로 합처진다.)
$ git merge 옵션 | |
$ git merge [브랜치명] $ git merge --ff [브랜치명] |
현제 Checkout되어있는 HEAD에 [브랜치명]을 병합한다. fast-forward merge 가능할경우 : fast-forward merge fast-forward merge 불가능할경우 : typyical merge |
$ git merge --no-ff [브랜치명] | 두 브랜치의 관계와 상관없이 무조건 Typical merge |
$ git merge --ff-only [브랜치명] |
Fast-forward merge가 가능할경우에만 fast-forward merge로 병합 실행 (merge commit 생성 X) |
$ git merge --squash [브랜치명] |
[브랜치명]의 변경사항(commit)들을 하나의 commit으로 묶어 Typical merge를 실행한다. (복잡한 히스토리를 간단히 정리 할수 있으나 남발할경우 수정내역의 파악이 힘들어진다.) |
팁 - 3-way merge? 2-way merge?
우리가 merge를 실행하면 git에선 3-way merge전략을 통하여 merge를 수립한다.
3-way merge는 분기점, 현재 HEAD, merge branch HEAD 3가지의 way를 비교하며
분기점으로 부터의 변경사항이 있는 부분만을 비교하여 충돌을 최소화한다.
반면 2-way merge는 오로지 현재 HEAD, merge branch HEAD만을 비교하여
서로 다른점마다 모두 충돌을 일으켜 많은 양의 충돌을 일으킬 가능성이 높다.
$ git rebase
git rebase는 브랜치의 Base(branch를 만든 시점)를 chekout 브랜치의 HEAD로 Base를 옮기는 명령어이다.
merge와 다르게 히스토리 그래프가 깔끔하게 정리된다는 장점이 있으나 공동 작업시 여러 문제가 발생할수 있다.
rebase시 주의할점
rebase는 히스토리 그래프를 깔끔하게 만들어주고 버전의 관리를 보다 용이하게 만들어준다는 장점이 있으나
무분별한 사용은 오히려 더 큰 문제를 야기할수 있다.
주의할점
- 브랜치가 병합된 시점이 기록되지않아 별도의 방법으로 기록하여 주어야 한다.
(tag, commit masege 등을 이용하자.)- commit들이 모두 fetch화 되어 순서되로 적용되기 때문에 각commit 충돌을 모두 해결하여야 한다.
(sqush를 통하여 commit을 압축하면 그나마 덜하다고 한다.)- brnach에서 최신 버전이 아닐경우 강제 push를 써야만 올라가는 경우가 발생한다.
(강제push시 만약 해당 브랜치를 다른사람과 같이 사용중이라면 히스토리가 꼬여 난리가 난다.)
> $ git rebase
5. 단축키 설정하기.
$ git config alias
git config alias는 git명령어들의 단축키를 등록하는 명령어이다.
콘솔창에서 일일이 입력하여 지정하는방법도 있고 ~/.gitconfig 파일에 입력하여 지정하는 방법도 있다.
> $ git config alias
명령어를 통한 등록 방법
$ git config --[사용위치] alise.[단축어] "[명령어]" // 서식
[사용위치]
> * --global : 지정시 본인(컴퓨터)에 한하여 사용가능하다.
> * --local : 지정시 해당 local(저장소)에서만 사용이 가능하다.
>
> [--system : 지정시 모든 사용자에게 단축어를 적용할것으로 예상된다.(테스트중...) ]
[단축어]
> 사용할 이름을 지정
> 단축어 사용시 $ git [단축어] 로 입력하면 사용된다.
[명령어]
> 단축어에 등록할 명령어를 지정해준다.
.gitconfig 파일을 통한 등록 방법
C:/Users/[사용자]/.gitconfig // global
~/.git/config // local
위와같은 경로에 들어가 아래와 같이 입력하면 등록 된다!
[alies]
[단축어] = [명령여]
Step 2 - Remote Repository와 작업하기
1. 주된 작업
Remote Repository에서의 주 기능은 협업에 맞춰져 있다.
여러 개발자들이 Pull/Init(다운로드)를 통해 Local Repository에서 작업을 진행하고
Remote Repository에 Push(업로드)하여 Marge(병합)하는등 따로 작업한 작업물들을
작업을 하나로 통합시키는 역할을 한다.
2. 명령어와 역할
1. 연결
$ git remote
$ git remote는 git server(git hub등)와의 연결에 관련된 명령어이다.
해당 명령어를 통하여 git server에 연결상채, 연결, 해제등 전반적인 작업이 가능하다.
> $ git remote
$ git remote 옵션 | |
$ git remote -v $ git remote --verbose | git server와의 연결상태를 표시해준다. |
$ git remote add [저장소이름] [url] | [url]에 해당하는 git server를 [저장소이름]으로 등록한다. |
$ git remote remove [저장소이름] | [저장소이름]에 해당하는 git server와의 연결을 해제합니다. |
$ git remote get-url [저장소이름] |
[저장소이름]에 해당하는 url 값을 보여줍니다. (--all : 모든 url return) (--push : push url return) |
$ git remote set-url [저장소이름] |
[저장소이름]에 해당하는 url 값을 수정합니다. (--push : push url만 변경) |
2. 업로드
$ git push
$ git push는 git server로 자신이 작업한 내용을 push(업로드)하는 명령어이다.
자신의 입맛대로 branch와 remote Repository를 선택 가능하다.
> $ git push
> $ git push (-u [저장소이름] [brnach])
해당명령어에서 ()안의 내용들은 생략할수 있고 각각 내용은 이렇다.
[저장소이름], [brnach]의 경우에는 -u로 한번이라도 해당[branch]를 업로드 했어야 가능하다.
$ git push 옵션 | |
-u |
[branch]를 simply push를 진행할때 이번에 업로드한 [branch]를 [저장소이름]으로 업로드 하게 설정한다. simply push(저장소 이름, branch 를 생략하고 push함) |
[brnach] |
업로드할 branch를 지정한다. 생략시 현재 checkOut되어있는 brnach를 업로드 함. |
$ git remote remove [저장소이름] | [저장소이름]에 해당하는 git server와의 연결을 해제합니다. |
[저장소이름] |
업로드할 branch를 지정한다. 생략시 현재 -u로 업로드 할때 지정했었던 저장소로 올라간다. |
3. 다운로드
$ git clone
$ git clone은 명령어를 실행한 폴더에 git server에 올라가 있는 Repositiry를 복사해오는 명령어이다. 옵션에 따라 commit이력, 숨긴이력, work tree(작업물)들을 복사해올수 있다.
> $ git clone
$ git clone 옵션 | |
$ git clone [url] | [url]저장소의 Master(HEAD)브랜치의 commit내역과 work tree의 내용을 가져온다. |
$ git clone --no-checkout [url] $ git clone -n [url] |
[url]저장소의 Master(HEAD)브랜치의 commit내역만을 복사하고 빈work Tree를 생성한다. 원하는 branch로 checkout 하여 작업이 가능하다. |
$ git clone --bare [url] | [url]저장소의 작업 파일 들을 제외한 원격저장소에 저장된 branch들의 commit내역만을 복사한다. 원본 저장소와의 관계가 있는 내용을 제외하고 복사하게된다. |
$ git clone --mirror [url] | [url]저장소의 모든 내용을 그대로 복사한다. 원본저장소의 정보와 모든 이력을 그대로 가져온다. |
$ git fetch
$ git fetch는 해당 브랜치의 최신 이력을 추적중인 브랜치에서 가져오는 명령어 입니다.
원격 저장소의 내용을 가져와 비교해보거나 병합하는 식의 사용이 가능합니다.
이름 없는 branch로 가져오고 ‘FETCH_HEAD’이름으로 checkout이 가능합니다.
> $ git fetch
$ git pull
$ git pull은 git fetch를 가져와 동시에 병합까지 진행시키는 명령어 입니다.
merge와 마찬가지로 ff(Fast-forward)병합이 가능하다면 ff로 불가하다면 typical merge로 진행됩니다.
(typical merge 시 충돌이 있다면 충돌 해결을 진행하여야 합니다.)
> $ git pull
댓글남기기