안녕세계
[Git] git 사용법 (git cheatsheet) 본문
[Git] git 사용법 (git cheatsheet)
Junhong Kim 2018. 4. 11. 18:14
로컬 저장소
사용자 정보 설정
git 버전 생성시 기록될 사용자 정보를 설정합니다. 이 설정은 ~/.gitconfig
파일에 저장됩니다.
$ git config --global user.name <user_name>
$ git config --global user.email <user_email>
사용자 정보 확인
$ git config --list
$ git config <user.name>
git 저장소 생성
# 새로운 디렉토리를 생성하고 이동합니다.
$ mkdir <directory_name> && cd <directory_name>
현재 디렉토리를 로컬 저장소로 설정합니다.
$ git init
현재 디렉토리에 .git
파일이 생성된 것을 확인하실 수 있습니다.
$ ls -al
total 0
drwxr-xr-x 3 INMA staff 96 12 1 19:32 .
drwxr-xr-x 4 INMA staff 128 12 1 19:32 ..
drwxr-xr-x 9 INMA staff 288 12 1 19:32 .git
버전 상태 (status)
현재 디렉토리 상태를 확인 합니다.
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
현재 master
브랜치에는 아직 commit
내용이 없다고 하니 먼저 새로운 파일을 생성합시다.
$ echo 'hello world' > hello.txt
cat hello.txt
hello world
파일을 생성한 뒤 status
명령어로 디렉토리 상태를 확인 해봅시다.
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.txt
nothing added to commit but untracked files present (use "git add" to track)
버전 추적 (add)
아직 git이 hello.txt
파일을 추적하지 않고 있습니다.
git이 해당 파일을 버전 관리하기 위해서는 add
명령어를 사용하여 staged area
에 올려야합니다.
# git add <file_name | directory_name>
# git add --all
$ git add hello.txt
이제 hello.txt 파일은 staged area에 올라갔으며 commit 대기 상태가 되었습니다.
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt
버전 생성 (commit)
git의 add
명령어로 특정 파일을 추적하기 시작하면 이제 commit
명령어로 새로운 버전을 만들 수 있습니다.
# git commit
$ git commit -m "<commit message>"
[master (root-commit) f55f2c7] init
1 file changed, 1 insertion(+)
create mode 100644 hello.txt
-a
옵션으로 add
명령어로 staged area에 올리지 않고 바로 commit
할수도 있습니다.
(단, 최초 파일은 staged area에 올라간 상태여야 합니다.)
# git commit -a
$ git commit -am "<commit message>"
--amend
옵션으로 로컬 저장소에 있는 마지막 commit message를 수정할 수 있습니다.
# git commit --amend
$ git commit --amend -m "<commit message>"
# 원격 저장소에 반영이 필요할 경우 다음 명령어를 추가로 실행합니다.
$ git push -f
버전 확인 (log)
새로운 버전을 생성했으므로 이제 버전 log 명령어로 버전 목록을 확인할 수 있습니다.
$ git log [--reverse]
Author: Junhong-Kim <jhk1005jhk@gmail.com>
Date: Sat Dec 1 20:15:03 2018 +0900
init
버전 비교 (diff)
diff
명령어를 통해 직전 버전과 차이점을 비교할 수 있습니다. (특정 버전간 비교도 가능)
$ git diff [<version1> <version2>]
버전 복구 (reset)
reset
명령어로 과거 버전으로 돌아갈 수 있습니다.
# commit 내역 삭제 (코드 유지)
$ git reset --soft <version>
# commit 내역 삭제 (코드 제거)
$ git reset --hard <version>
# 최신 commit 내역 삭제
$ git reset --hard HEAD^
# 원격 저장소에 반영이 필요할 경우 다음 명령어를 추가로 실행합니다.
$ git push -f
# 원격저장소의 마지막 commit 삭제
$ git push origin +HEAD^:master
원격 저장소
원격 저장소 확인 (remote)
remote
명령어로 로컬 저장소와 연결된 원격 저장소를 확인 합니다.
$ git remote [-v]
원격 저장소 연결 (remote add)
remote add
명령어로 로컬 저장소를 원격 저장소(Github, Bitbucket 등)와 연결합니다.
# git remote add <alias> <remote_url>
$ git remote add origin <remote_url>
원격 저장소 연결 제거 (remote remove)
remote remove
명령어로 로컬 저장소와 원격 저장소의 연결을 제거합니다.
# git remote remove <remote_url>
$ git remote remove origin
원격 저장소 소스 복제 (clone)
clone
명령어로 연격 저장소의 소스를 로컬 저장소로 복제합니다.
$ git clone <remote_url>
원격 저장소 소스 다운로드 (pull)
pull
명령어로 원격 저장소의 소스를 로컬 저장소로 다운로드합니다.
# git pull <remote_url> <remote_branch>
$ git pull origin master
원격 저장소 소스 업로드 (push)
push
명령어로 로컬 저장소의 소스를 원격 저장소로 업로드합니다.
# git push <remote_url> <remote_branch>
$ git push origin master
원격 저장소 설정 (upstream 설정)
-u
또는 --set-upstream
옵션으로 push 명령어 설정을 합니다.
$ git push [-u | --set-upstream] origin master
$ git push origin master
이제 git push 명령어는 해당 원격 저장소 branch로 업로드(push) 됩니다.
$ git push
브랜치
브랜치 목록 (branch)
branch
명령어로 로컬 저장소 브랜치 목록을 확인할 수 있습니다.
# -a 옵션으로 원격 브랜치 저장소 목록을 확인할 수 있습니다
$ git branch [-a]
브랜치 생성 (branch)
branch
명령어로 새로운 브랜치를 생성할 수 있습니다.
$ git branch [branch_name]
브랜치 삭제 (branch -d)
-d
옵션으로 브랜치를 삭제할 수 있습니다.
$ git branch -d [branch_name]
-D
옵션은 병합하지 않은 브랜치를 강제로 삭제할 수 있습니다.
$ git branch -D [branch_name]
브랜치 전환 (checkout)
checkout
명령어로 현재 브랜치를 전환할 수 있습니다.
$ git checkout [branch_name]
-b
옵션을 사용하면 브랜치를 생성후 해당 브랜치로 전환합니다.
$ git checkout -b [branch_name]
브랜치 비교 (diff)
버전을 비교하는 것처럼 diff
명령어를 사용하여 브랜치간의 차이를 비교할 수 있습니다.
$ git diff <branch1> <branch2>
브랜치 병합 (merge)
merge 명령어로
특정 브랜치의 소스를 현재 브랜치 소스에 병합합니다. (master ← develop)
$ git checkout master
$ git merge develop
태그
태그 목록 (tag)
tag 명령어로 현재 로컬 저장소의 태그 목록을 확인할 수 있습니다.
$ git tag
태그 생성 (tag)
tag
명령어로 현재 로컬 저장소에 태그를 생성할 수 있습니다.
# light weight tag
# git tag <tag_name> [version_id]
$ git tag v0.0.1
# annotated tag
# git tag -a <tag_name> -m "<tag_message>" [version_id | branch_name]
$ git tag -a v0.0.1 -m "first tag"
태그 삭제 (tag -d)
-d
옵션으로 현재 로컬 저장소의 태그를 삭제할 수 있습니다.
# git tag -d <tag_name>
$ git tag -d v0.0.1
원격 저장소의 태그를 삭제하기 위해서는 태그 앞에 :
을 붙여서 업로드(push) 합니다.
# git tag -d <tag_name>
$ git tag -d v0.0.1
다음 명령어를 실행하여 모든 로컬 저장소 태그를 삭제할 수 있습니다.
$ git tag -l | xargs git tad -d
다음 명령어를 실행하여 모든 원격 저장소 태그를 삭제할 수 있습니다.
$ git tag -l | xargs -n 1 git push --delete origin
태그 업로드 (push)
원격 저장소에 특정 태그를 업로드 하기 위해 다음 명령어를 실행합니다.
# git push <remote_url> <tag_name>
$ git push origin master v0.0.1
원격 저장소에 로컬 저장소의 모든 태그를 업로드하기 위해 다음 명령어를 실행합니다.
$ git push origin master --tags
충돌 해결 (conflict)
브랜치간 병합(merge)시 충돌이 발생할 경우 다음 메시지가 출력됩니다.
Auto-merging [conflicted file name]
CONFLICT (content): Merge conflict in [conflicted file name]
Automatic merge failed; fix conflicts and then commit the result.
병합시 충돌한 파일을 status
명령어로 확인합니다.
$ git status
<<<<<<< HEAD
부터 =======
사이가 현재 체크 아웃된 파일의 내용이고
=======
부터 >>>>>>> develop
사이가 병합하려는 대상인 develop 브랜치의 코드 내용입니다.
위 정보를 참고하여 두 소스의 충돌을 해결한 뒤 특수 기호를 제거합니다.
function b() {
}
<<<<<<< HEAD
function a(master) {
=======
function a(develop) {
>>>>>>> develop
}
function c() {
}
충돌한 내용을 모두 해결한 뒤 해당 파일을 add
후 commit
합니다.
$ git add [conflicted file name | *]
$ git commit [conflicted file name | *]
.gitignore
git 버전 관리에서 제외할 파일은 .gitignore
파일에 파일명을 추가하여 제외할 수 있습니다.
$ echo "secrets.js" >> .gitignore
이미 버전 관리되고 있는 파일을 git에서 제거 하기 위해서는 rm
명령어를 사용합니다.
$ git rm --cached <file_name>
로컬 저장소에 있는 파일을 삭제한뒤 원격 저장소에도 반영합니다.
$ git rm --cached <file_name>
$ git commit -m "delete some file"
$ git push origin master
References
'Git' 카테고리의 다른 글
[Git] git-flow 사용법 (git-flow cheatsheet) (4) | 2018.04.11 |
---|---|
[Git] Github Gist란? (0) | 2018.02.12 |
[Git] 안드로이드 스튜디오(Android Studio)에서 Github으로 협업하기 (0) | 2017.01.04 |
[Git] 웹스톰(Webstrom)에서 Github으로 프로젝트 올리기 (0) | 2016.10.14 |