Study/Etc.

[GIT] GIT 내용 정리 (지옥에서 온 GIT on 생활코딩)

빨간당무 2019. 3. 4. 17:13


https://opentutorials.org/course/2708

code -> stage (commit 전 대기) -> repository (commit 후)

https://git-scm.com/

https://git-scm.com/book/ko/v2

한글 매뉴얼 지원


프로젝트(레파지토리) 폴더 생성

git init

git status

git add [관리할파일명]


git config --global user.name [유저이름]

git config --global user.email [이메일]

이걸 하지 않고 진행하는 경우 --global to set the identity only in this repository 매세지가 보이게됨


git commit

만약 윈도우10에서 git commit 실행시 vim으로 실행 안된느 경우 다음 코드 실행 : git config --global core.editor vim

vim 이 실행되었을 때 commit message를 작성


git log


git add [업데이트할파일명]

처음 추가할 때도, 버전 업 할 때도 add를 사용함


git log -p

자세한 내용 출력


git log [commitID]

해당 id 이전만 보여줌


git diff [begin commit id] [end commit id]

git diff [begin commit id]..[end commit id]

해당 id 구간만 보여줌


git diff

현재 작업 중인 (commit 전) 변경 사항을 보여줌


이전 log로 되돌리기

git reset VS git revert

설명카툰 : https://www.popit.kr/개발바보들-git-back-to-the-future/


git reset [commit id] --hard

commit을 삭제하고 이전 commit으로 최신화 하고 싶음

만약 --hard를 안했다면 git diff로 변경사항이 보이고, git reset --hard 하여 바꿀수 있음

--soft 등의 옵션도 존재함

과거로 되돌리는 것(돌아가는 이전까지 모든 내역이 사라짐)

server로 push 하기 전이라면 reset


git revert [commit id]

이전 log로 돌아가면서 새로운 버전을 만드는 것

특정 사건을 없었던 일로 만드는 것(돌아가는 이력까지 log로 남음)

server로 push 한 후라면 revert


git commit -help

도움말


git commit -a 

git commit --all

git add 없이 바로 stage area에 업로드

단, 기존에 add 해둔 파일들만 가능 (새로운 파일은 add 해야함)


git commit -m ["코멘트"]

git commit --message ["코멘트"]

코멘트 바로 넘김


git commit -am ["코멘트"]

-a, -m 옵션을 동시에 (즉 여러 옵션을 연달아 나열할 수 있음)


Ref. https://git-scm.com/book/ko/v2/Git-브랜치-브랜치와-Merge-의-기초


git branch

현재 브랜치 리스트 확인


git branch [브랜치 이름]

현재 기준 새로운 브랜치 생성


git checkout [브랜치 이름]

브랜치 변경


git checkout -b [브랜치 이름]

현재 기준 새로운 브랜치 생성하고 바로 전환

git branch [브랜치 이름]

git checkout [브랜치 이름]


git branch -d [브랜치 이름]

브랜치 삭제


git branch -D [브랜치 이름]

병합하지 않은 브랜치를 강제 삭제


git log --branches --graph

모든 브랜치의 로그를 보여주며(브랜치 이름을 보여주며), 그래프처럼 앞에 수직 라인으로 연결관계를 보여줌


git log --branches --graph --oneline

모든 브랜치의 로그를 보여주며(브랜치 이름을 보여주며), 그래프처럼 앞에 수직 라인으로 연결관계를 보여줌

각 브랜치를 한줄로 요약함

git log [브랜치1]..[브랜치2]
브랜치1에 없지만 브랜치2에 있는 걸 보여줌


git diff [브랜치1]..[브랜치2]
내용 차이를 비교해줌

git checkout master
master 브랜치에 다른 브랜치를 병합(merge)하려면
git merge [다른브랜치]
vim 창이 뜨면서 comment 입력 가능


merge 시에 충돌이 발생한 경우 git status 로 충돌이 난 파일을 확인하여 수정 후 commit 하면 됨

stash

현재 브랜치의 작업중인 내용을 commit 하지 않고 stage에 임시로 저장하는 것

버전관리 되고 있는 파일/폴더만 해당 (즉, tracked files만)

WIP (working in process; 작업중)


git stash apply

stash 했던 내역을 다시 작업 할 때


git stash list

임시 작업 목록을 보여줌


git reset --hard HEAD

현재 작업 중인 것을 최신 commit 버전으로 복구함

단, stash 내용가지 날라가진 않음


git stash drop 

가장 최근 stash 를 삭제


git stash pop

git stash apply ; git stash drop

위 두개 명령과 동일


HEAD

현재 checkout한 브랜치의 최신 commit을 알려줌


git init [저장소이름]

하위 디렉토리로 repository 생성


git init -bare remote [저장소이름]

하위 디렉토리로 작업은 불가능하고 저장만 가능한 repository 생성 (수정 불가능)


git remote add [원격저장소별명] [원격저장소경로]

원격 저장소 연결


git remote -v

원격 저장소 목록


git config --global push.default simple

원격 저장소에 업로드 하는 방식을 결정, simple (선택한 파일만) or defalut (알아서)


git push --set-upstream origin master

origin에 master 브랜치를 업로드하도록 지정


git push

원격 저장소로 업로드


git site에서 fork 하게 되면 해당 저장소를 내 계정으로 가져옴


git clone [복제하려는원격저장소주소] [저장소이름]

복제하려는 원격저장소를 현재 디렉토리의 하위 저장소로 가져옴

만약 이미 저장소 디렉토리가 있고, 현재 디렉토리라면 저장소 이름을 .으로 하면됨


git log --reverse 

로그를 거꾸로 보기


git commit --amend

마지막 commit의 코멘트를 수정 (지역 저장소)


git pull

원격 저장소로부터 가져오기


Secure Shell (SSH)

ssh_keygen

id_rsa - private key - server / server

id_rsa_pub - public key - remove / client

github.com 사이트에 setting -> SSH and GPG keys -> SSH keys -> New SSH key 로 추가함


이후 git push 했을 때 

git@github.com: Permission denied (publickey).

fatal: Could not read from remote repository.


Please make sure you have the correct access rights

and the repository exists.

이렇게 나온다면 해당 client에서 만들어진 SSH private key인 id_rsa를 찾을 수 없거나 틀린 경우임

Everything up-to-date
이렇게 나온다면 정상적으로 commit 된거임