본문 바로가기
프로그래밍 놀이터/Tips

[도서 정리] 2. Git 의 기초 #2 - ProGit

by 돼지왕 왕돼지 2020. 1. 6.
반응형

[도서 정리] 2. Git 의 기초 #2 - ProGit



2.4. 되돌리기


-

되돌린 것은 복구할 수 없기 때문에 주의해야 한다.



-

이전 커밋에 추가 커밋하고 싶을 때는 git commit —amend 를 사용한다.

마지막으로 커밋하고나서 수정한 것이 없다면 커밋 메시지만 변경된다.




* 파일 상태를 Unstage 로 변경하기


-

Staging Area 에 있는 파일을 Unstage Area 로 옮기려면 아래와 같이 한다.

$ git reset HEAD <file>…



-

git reset 명령을 —hard 옵션과 함께 사용하면 워킹 디렉터리 파일까지 수정되기에 조심해야 한다.




* Modified 파일 되돌리기


-

git checkout — [file] 을 통해 수정한 파일을 modified 전으로 되돌린다.

이 명령은 원래 파일로 덮어쓰기 때문에 수정한 내용이 전부 사라진다.

$ git checkout -- [fileName]



-

변경한 내용을 쉽게 버릴 수는 없고 당장은 되돌려야만 하는 상황이라면 Stash 와 Branch 기능을 사용할 수 있다.



-

Git 으로 커밋한 모든 것은 언제나 복구할 수 있다.

삭제한 브랜치에 있었던 것도, --amend 옵션으로 다시 커밋한 것도 복구할 수 있다.





2.5. 리모트 저장소


* 리모트 저장소 확인하기


-

git remote 명령으로 현재 프로젝트에 등록된 리모트 저장소를 확인할 수 있다.

-v 옵션을 주어 단축 이름과 URL 을 함께 볼 수 있다.

$ git remote -v



-

리모트 저장소는 여러 개 등록될 수 있으며, 여러 개가 등록되어 있으면 다른 사람이 기여한 내용(Contributions)을 쉽게 가져올 수 있다.




* 리모트 저장소 추가하기


-

$ git remote add [short_name] [url]


ex) 아래와 같이 하면 앞으로 url 대신 pb 라는 이름을 사용할 수 있다.

$ git remote add pb https://github.com/paulboone/ticgit



-

아래 명령을 통해 fetch 할 수 있다.

$ git fetch [short_name]

$ git fetch [url]




* 리모트 저장소를 Pull 하거나 Fetch 하기


-

저장소를 clone 하면 자동으로 리모트 저장소를 “origin” 이란 이름으로 추가한다.

그리고 로컬의 master 브랜치가 리모트 저장소의 master 브랜치를 추적하도록 한다.

git fetch 명령은 리모트 저장소의 데이터를 모두 로컬로 가져오지만, 자동으로 merge 하지는 않는다.



-

git pull 명령은 리모트 저장소 브랜치에서 데이터를 가져올 뿐만 아니라 자동으로 로컬 브랜치와 merge 시킬 수 있다.




* 리모트 저장소에 Push 하기


-

git push [remote_name] [branch_name] 으로 저장소에 push 할 수 있다.


ex) 

$ git push origin master



-

push 는 clone 한 리모트 저장소에 쓰기 권한이 있고, clone 하고 난 이후 아무도 upstream 저장소에 push 하지 않았을 때만 사용할 수 있다.

다시 말해 clone 한 사람이 여러 명 있을 때, 다른 사람이 push 한 후 push 하려 하면, 그 사람의 작업을 먼저 가져와 merge 한 후 push 할 수 있다.




* 리모트 저장소 살펴보기


-

git remote show [remote_name] 을 통해 remote 의 구체적인 정보를 확인할 수 있다.

$ git remote show origin

출력은 리모트 저장소의 URL 과 추적하는 브랜치를 출력한다.

그리고 브랜치명을 생략하고 pull, push 명령에 대한 branch 관계도 보여준다.

로컬로 가져오지 않은 리모트 저장소의 브랜치 정보, 서버에서는 삭제됐지만 아직 가지고 있는 브랜치 정보 등도 보여준다.





* 리모트 저장소 이름을 바꾸거나 리모트 저장소를 삭제하기


-

git remote rename 명령으로 리모트 저장소의 이름을 변경할 수 있다.


ex) 

$ git remote rename pb paul


이렇게 하면 branch 이름도 바뀌어 pb/master 가 paul/master 가 된다.



-

리모트 저장소를 삭제해야 한다면 git remote rm 명령을 사용한다.

서버 정보가 바뀌었을 때, 또는 더는 별도의 미러가 필요하지 않을 때 등에 필요하다.


ex) 

$ git remote rm paul








2.6. 태그


* 태그 조회하기


-

git tag 명령을 사용한다.

이 명령은 알파벳 순서로 태그를 보여준다.



-

검색 패턴을 사용하여 태그를 검색할 수도 있다.


ex) 

$ git tag -l ‘v1.8.5*’




* 태그 붙이기


-

Git 의 태그는 Lightweight 태그와 Annotated 태그로 두 종류가 있다.

Lightweight 태그는 특정 커밋에 대한 포인터일 뿐이다.

Annotated 태그는 Git DB 에 태그를 만든 사람의 이름, 이메일과 태그를 만든 날짜, 그리고 태그 메시지도 저장한다. GPG(GNU Privacy Guard)로 서명할 수도 있다. 이 모든 정보를 저장해둬야 할 때만 Annotated 태그를 추천한다. 그렇지 않으면 Lightweight 태그를 사용하는 것이 좋다.




* Annotated 태그


-

git tag -a 를 통해 생성한다.


ex) 

$ git tag -a v1.4 -m ‘my version 1.4’



-

git show tag_name 을 통해 태그 정보와 커밋 정보를 모두 확인할 수 있다.

$ git show [tag_name]




* Lightweight 태그


-

Lightweight 태그는 기본적으로 파일에 커밋 체크섬을 저장하는 것이다.

다른 정보는 저장하지 않는다.

-a, -s, -m 옵션을 사용하지 않는다.


ex) 

$ git tag [tag_name]




* 나중에 태그하기


-

특정 커밋에 태그하기 위해서 명령의 끝에 커밋 체크섬을 명시한다.(긴 체크섬을 전부 사용할 필요는 없다.)


ex) 

$ git tag -a v1.2 9fceb02




* 태그 공유하기


-

git push 명령은 자동으로 리모트 서버에 태그를 전송하지 않는다.

git push origin tag_name 을 수행해서 올려야 한다. ( branch 와 동일하다. )

$ git push origin [tag_name]



-

태그를 여러 개 push 하고 싶으면 —tags 옵션을 추가하여 git push 명령을 수행한다.

ex) 

$ git push origin —tags



-

clone, fetch, pull 하는 경우 태그 정보도 함께 전송된다.




* 태그를 Checkout 하기


-

태그는 브랜치와는 달리 가리키는 커밋을 바꿀 수 없는 이름이기 때문에 checkout 해서 사용할 수 없다.

태그가 가리키는 특정 커밋 기반의 브랜치를 만들어 작업하려면 아래와 같이 새로 브랜치를 생성해야 한다.


ex) 

$ git checkout -b version2 tag_name





2.7. Git Alias


-

명령을 완벽하게 입력하지 않으면 Git 은 알아듣지 못한다.

Git 의 명령을 전부 입력하는 것이 귀찮다면 git config 를 사용하여 각 명령의 alias 를 쉽게 만들 수 있다.


ex)

$ git config —global alias.co checkout

$ git config —global alias.br branch

$ git config —global alias.ci commit

$ git config —global alias.st status



-

이미 있는 명령을 편리하고 새로운 명령으로 만들어 사용할 수 있다.

예를 들어 파일을 unstaged 상태로 변경하는 명령을 만들 수 있는데...

$ git config —global alias.unstage ‘reset HEAD —‘ 


최근 커밋을 확인할 수도 있다.

$ git config —global alias.last ‘log -1 HEAD’ 



-

git 명령어 뿐만 아니라 외부 명령어도 실행할 수 있다.

! 를 제일 앞에 추가하면 외부 명령을 실행한다.

커스텀 스크립트를 만들어서 사용할 때 매우 유용하다.


ex) git visual 이라고 입력하면 gitk 가 실행된다.

$ git config —global alias.visual ‘!gitk’





2.8. 요약




반응형

댓글