본문 바로가기
개발자의 공부방/git

git] 기초 명령어 모음

by 쌈빡한 쥬니준 2020. 1. 23.

1. git 초기화

git init

 

1-1. 사용자 등록

git config --global user.email "본인의 이메일"

git config --global user.name "본인의 이름"

*global 뒤를 생략하고 엔터를 입력하면 현재 본인의 이메일 혹은 이름을 볼 수 있다.

 

1-2. origin 이라는 이름으로 원격서버를 저장하겠다 라는 뜻. (원격저장소 이름 = origin)

*origin 대신 다른 이름으로도 변경이 가능.

git remote add origin https://github.com/~!@#!~#@.git

 

Build software better, together

GitHub is where people build software. More than 40 million people use GitHub to discover, fork, and contribute to over 100 million projects.

github.com

 

2. 현재 원격 레포지토리에 올라갈 파일들의 상태를 보는 명령어

git status

 

Untracked files => Unstage 로 올라간 것

(빨간색 파일 표시 : 깃이 관리하고 있지 않은 파일) =>

(초록색 파일 표시 : 깃이 관리를 할 파일)

 

2-1. 파일을 수정하면 초록색으로 수정이 되는데 다시 빨간색으로 되돌리는 명령어

(Untracked )

git rm --cached 파일명

* 만약에 --cached 옵션을 입력하지 않을 경우 파일이 삭제가 된다.

2-2. 파일과 폴더 지우기

파일 삭제 : git rm 파일명 

폴더 삭제 : git rm -r 파일명 (만약에 강제로 삭제를 원한다면 -rf)

*unstage에 올라간 상태에서 파일 안의 내용을 바꿨다면 untracked 상태로 바꾸고 올려야한다.

*혹은 삭제를 하고 다시 올린다.

 

3. git add .

commit 할 모든 파일을 추가

3-1. git add 와 git commit 을 함께 할 수 있게 한다.

git commit -am "메시지"

*-a 는 all 이라는 뜻.

*만약 여러개 파일 중 특정 파일 여러개를 commit 하려면 git commit 파일1 파일2 -m "메시지"

 

4. git commit -m "메시지"

commit 과 함께 코멘터리를 작성

4-1. git commit 만 하게 되면 vim편집기가 작동된다. 긴 문장의 메시지를 쓸 수 있다.

 

5. commit 한 것을 원격 레포지토리(github)로 보낸다.

git push

*git push <remote> <branch> => git push origin master

*remote 는 레포지토리 주소를 의미하는 것이 아닌 레포지토리 이름을 의미하는 것. branch는 가지를 의미하는데 현재 따로 분기를 해서 branch를 만든 것이 없음으로 master 라고 되어 있다. 이 master가 기준으로 되는 것이다.

 

6. 커밋의 로그를 볼 수 있는 명령어.

자세한 로그 : git log

간략한 로그 : git shortlog

 

7. checkout의 기능은 2가지가 있다.

1) 수정된 걸 되돌릴 때.

git checkout -- code1.txt

 

8. 파일이 많아서 어떤 명령어를 썼는지 모를 경우.

git diff

 

9. 한글 파일 깨져서 나올 때.

https://jjunii486.tistory.com/151?category=790335

 

10. 원격 레포지토리의 주소를 모를 경우

*git remote rename 을 사용해서 원격저장소 이름을 변경했을 때는 origin 대신 변경한 이름을 적으면 된다.

git remote get-url origin

 

11. 실수로 commit 을 했을 경우

git reset HEAD

*HEAD란 현재의 위치를 의미한다.

*만약에 하나 뒤로 되돌리고 싶으면 git reset HEAD~1

*reset은 실수로 기록한 commit 기록조차 완전히 삭제하기 때문에 유의해야한다.

*기존 소스를 날리고 싶지 않은 상태에서 뒤돌아가고싶으면 원격 레포지토리에 push 를 하고 해야한다.

*안그러면 로컬에 있는 히스토리는 다 사라진다.

*git reflog 라는게 있는데 왠만하면 잘 사용하지 않는게 좋다.

*git reset --hard 를 하면 HEAD 없이 그냥 기존 커밋으로 돌아간다.

*commit 에는 ID 가 있는데 7자리를 떼면 짧은 아이디가 된다. ex) git reset 37f3e9

*깃크라켄이나 소스트리 등의 툴을 이용하면 아이디가 6자리 나오게 된다.

 

soft → mixed   hard

git add 까지 한 상태로 돌아간다 : soft

초록색에서 빨간색으로 돌아간다 : mixed (기본)

기존커밋으로 돌아간다 : hard (수정내용없는 기존으로 돌아간다)

 

12. 실수로 commit을 했지만 실수한 것을 기록에 남기고 싶을 때.

git revert HEAD

*git revest HEAD 37f3e9 이렇게 써도 된다.

*HEAD 하나만 쓰는 것은 현재를 말하는 것이므로 현재의 HEAD를 되돌리면서 커밋을 하는 것이다.

*이때 vim 편집기가 나온다.

*협업할 때 revert를 많이 쓴다고 한다. 

*reset 과 revert 의 개념을 쉽게 설명한 만화 참고 : http://www.devpools.kr/2017/01/31/%EA%B0%9C%EB%B0%9C%EB%B0%94%EB%B3%B4%EB%93%A4-1%ED%99%94-git-back-to-the-future/

 

개발바보들 1화 - git "Back to the Future"

  이 내용에 대한 자세한 기술적인 설명이 듣고 싶나요? 연속되는 다음글을 참조하세요    

www.devpools.kr

*reset과 revert를 간단히 요약하자면

- reset은 타임머신을 타고 테러가 일어나기 전의 시간을 되돌렸다.

- revert는 테러를 당한 사건만 취소하는 이력이 하나 더 생긴 것이다.

- push가 됐으면 reset은 잊어버리자. 다른 사람들의 기억들까지 잊게 할 수는 없다.

- revert를 해서 실수의 이력을 남기고 실수한 것을 수정 후 다시 커밋을 하는 것이다.. 한마디로 똥 싼 사람이 똥을 치워서 깨끗하게 만들어서 다른 사람들이 깨끗히 쓸 수 있게 하는 것(?)

- 정리 reset : 혼자서 작업하다 실수 했으면 reset, revert : push를 한것을 인정해버려서 commit을 하고 기록을 남겨놓는다. 즉, 되돌리는 것 조차도 기록으로 남겨놓는 것. 이게 왜 중요하냐면 나 혼자서 reset 해서 잘 마무리해놓고 push 해버리면 결국에는 남들과 소스를 통합하면 100% conflict 가 생기게 되는데 서로 고치려고 하는 것 보다 차라리 다 같이 실수해서 한번에 고치는게 훨씬 수월하고 나은 방법인 것이다.

 

13. 브랜치를 이용하자.

브랜치란? 가지를 의미한다.

자동차를 생각하면 된다. master 는 완벽히 판매할 수 있는 자동차 하나를 의미한다.

그렇다면 branch란? 이 완벽한 자동차 하나를 만들기 위한 부품 하나하나라고 생각하면 된다.

자동차 한개(master)를 만들기 위해서 자동차 몸체(branch), 문짝(branch), 바퀴(branch)...라고 생각하면 된다.

 

14. branch

git branch : 현재 내 branch가 몇개인지 그리고 지금 현재 내가 어떤 branch 인지 확인을 할 수 있다.

git branch 이름 : branch 를 만들지 않았으면 *master 하나만 나오는데 branch june 이렇게 하면 june 이라는 branch가 만들어진다.

git checkout 이름 : git checkout june 이라고 하면 방금 만든 june 이라는 브랜치로 선택된다. 스위칭된다라고 표현할 수 있다.

git branch -D 이름 : 브랜치 삭제

 

15. 병합하기 (merge & rebase)

master 가 있고 branch develoment 를 만들었다.

총 2개의 상태인데 master 에서 develoment 의 수정사항을 합쳐야한다.

git branch 를 입력 현재 branch 가 뭘로 선택되어 있는지 확인한다. master인게 확인이 됐으면..

git merge develoment 를 입력하면 된다.

만약 충돌이 일어나면 코드를 수정하고 commit 을 한다.

 

git rebase

 

16. master 에서 다른 브랜치를 가져올 때 필요없는 것은 제외하고 가져오고 싶을 때.

가져오고 싶은 commit된 아이디를 알고 있어야한다.

 

git cherry-pick 아이디번호

 

17. 임시 저장.

임시저장 : git stash

임시저장 목록 : git stash list

임시저장 삭제 : git stash drop

다른 branch 로 넘어가고 싶거나 할 때 사용하면 좋다.

임시저장한 것을 다른 branch 에 적용해도 된다.

 

18. merge + fetch = pull

fetch 는 언제 사용하나?

pull 을 하면 로컬 이력이 다 바뀐다. fetch를 함으로 원격과 로컬을 비교해보는 용도로 사용한다.

맞으면 git merge를 이용한다.

댓글0