안녕세계

[Git] git 사용법 (git cheatsheet) 본문

[Git] git 사용법 (git cheatsheet)

Junhong Kim 2018. 4. 11. 18:14
728x90
반응형

 

 

로컬 저장소

 

사용자 정보 설정

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() {

}

 

충돌한 내용을 모두 해결한 뒤 해당 파일을 addcommit 합니다.

$ 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

https://opentutorials.org/course/2708

728x90
반응형
Comments