public:computer:git

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
public:computer:git [2021/08/22 16:37] alexpublic:computer:git [2022/08/26 15:05] (current) – [Git 사용법 정리] alex
Line 1: Line 1:
 ====== Using git ====== ====== Using git ======
 +
 +
 +^  git 자주 사용하는 명령어 모음  ^^
 +^ 깃 초기화  | git init 경로명  |
 +^ 깃 상태 확인  | git status  |
 +^ 깃 저장소 복제  | git clone 원격저장소URL 새폴더이름  |
 +^ 파일 등록과 커밋  | git add 파일이름 -> git commit -> 에디터에서 커밋 메시지 작성  |
 +^ ::: | git commit -a -> 에디터에서 커밋 메시지 작성  |
 +^ ::: | git commit -am "커밋 메시지"  |
 +^ 로그 확인  | git log  |
 +^ 커밋 비교  | git diff  |
 +^ 원격 저장소 별칭 확인  | git remote  |
 +^ 원격 저장소 별칭과 URL 확인  | git remote -v  |
 +^ 원격 저장소와 연결  | git remote add 원격저장소별칭 원격저장소URL  |
 +^ 원격 서버 삭제  | git remote rm 원격저장소별칭  |
 +^ 커밋 가져오기  | git pull 또는 git fetch  |
 +^ 커밋 전송하기  | git push 원격저장소별칭 브랜치이름  |
 +^ 현재 브랜치 확인  | git branch  |
 +^ 브랜치 생성  | git branch 브랜치이름  |
 +^ 브랜치 이동  | git checkout 브랜치이름  |
 +^ 스태시 저장  | git stash  |
 +^ 스태시 읽기  | git stash pop  |
 +^ 브랜치 병합  | git merge 브랜치이름  |
 +^ 리베이스 병합  | git rebase 브랜치이름  |
 +^ 리셋  | git reset 옵션 커밋ID  |
 +^ 리버트 취소 커밋  | git revert 커밋위치  |
 +^ 태그 관리  | git tag  |
 +^ 태그 전송  | git push 원격저장소별칭 태그이름  |
 +^ 서브모듈로 연결  | git submodule add 원격저장소URL 폴더이름  |
 +
  
 ===== why git? ===== ===== why git? =====
Line 52: Line 82:
   * pull -> 작업 -> commit -> pull -> push   * pull -> 작업 -> commit -> pull -> push
   * 대부분의 git 명령어는 working tree clean 상태에서 작업   * 대부분의 git 명령어는 working tree clean 상태에서 작업
 +  * reset; 저장소를 외부에 공개했거나 공유하고 있다면 주의해서 리셋 사용
 +  * revert; 기존 커밋을 남겨 두고 취소에 대한 새로운 커밋 생성.
 +  * reset vs. revert; 커밋 정보의 삭제 여부. 리셋: 커밋 삭제, 리버트: 취소 커밋 생성
 +  * versioning; major.minor.patch, SemVer(Semantic Versioning)
 +    * RC(Release Candidate), GA(General Availability), M(Milestone)
 +  * tag; 특정 커밋에 태그 부착
 +    * Annotated; 태그 이름 + 정보 포함
 +    * Lightweight; 태그 이름만 포함
 +    * ./git/ref/tags 폴더
  
 <cli prompt="$ " comment="  # "> <cli prompt="$ " comment="  # ">
Line 112: Line 151:
  
 $ git clean  # 워킹디렉토리 안에 추적되지 않는 파일을 모두 삭제, -f 강제, -n 가상으로 처리하고 사용자 확인, -d untracked 상태의 파일만 삭제, -x .gitignore 설정된 파일까지 삭제 $ git clean  # 워킹디렉토리 안에 추적되지 않는 파일을 모두 삭제, -f 강제, -n 가상으로 처리하고 사용자 확인, -d untracked 상태의 파일만 삭제, -x .gitignore 설정된 파일까지 삭제
 +
 +$ git log --oneline  # 로그 한줄씩
 +
 +$ git reset --hard HEAD^^^  # HEAD로부터 세번째로
 +$ git rest 옵션 커밋ID  # 옵션: soft; 스테이지 영역을 포함한 상태로 복원, mixed; 기본값, hard: 실제 파일이 삭제된 이전 상태로 복원
 +
 +$ git reset --soft HEAD~  # 이전 커밋으로 soft 옵션을 사용한 리셋. 파일을 수정하고 add 명령어로 스테이지 영역에 올려 커밋을 실행하기 직전의 단계로 되돌림
 +$ git commit --amend  # 위와 유사함
 +
 +$ git reset --mixed 커밋ID
 +$ git reset 커밋ID  # 위와 같은 명령
 +$ git reset --mixed HEAD~  # 리셋한 후 스티이지 상태까지 복원하지 않음, 커밋하려면 add 명령어를 먼저 실행
 +
 +$ git reset --hard HEAD~  # 사용한 커밋 이후의 모든 내용 삭제, 워킹 디렉토리 내용도 함께 삭제
 +
 +# 스테이지 리셋
 +$ git add 파일이름
 +$ git reset 파일이름
 +$ git reset --mixed HEAD 파일이름  # 파일 이름을 지정하여 리셋하면 해당 파일은 unstage 상태
 +$ git reset 커밋ID 파일이름
 +
 +# 작업취소
 +$ git reset --hard HEAD
 +
 +# 병합 취소
 +$ git reset --merge HEAD~
 +
 +
 +$ git revert HEAD  # 현재 커밋을 리버트, 새로운 리버트 커밋 생성
 +
 +$ git revert 커밋ID
 +$ git revert 커밋ID .. 커밋ID  # 범위 연산자 ..를 사용, 여러 커밋 리버트
 +
 +$ git revert --mainline 숫자 병함커밋ID  # 리버트로 병합 취소
 +
 +$ git tag
 +
 +$ git tag -l  # 또는 --list
 +
 +$ git tag -a 버전  # annotated 태그 생성, 에디터로 작성
 +
 +$ git log --decorate 
 +
 +$ git tag -a 버전 -m "메시지"  # 에디터 안뜸
 +
 +$ git tag -d 태그이름
 +
 +$ git show 태그이름  # 태그의 상제 정보 확인
 +
 +$ git tag 태그이름  # lightweight, 커밋의 체크섬만 가지고 있다
 +
 +$ git tag -a 태그버전 커밋ID  # 특정 커밋ID에 태그 버전 생성
 +
 +$ git checkout 태그버전  # 태그버전으로 체크아웃, 이 경우 추가 커밋 작성 불가
 +$ git checkout -b 브랜치이름 태그이름  # 태그 기준으로 브랜치 생성
 +
 +$ git push 태그이름  # 원격저장소에 태그이름 push
 +$ git push 원격저장소이름 --tags  # 모든 태그를 한꺼번에 원격저장소에 push
 +$ git push --delete 원격저장소이름 태그이름  # 원격저장소의 태그 삭제
 +$ git push 원격저장소이름 로컬태그이름:원격저장소태그이름  # 원격저장소에 로컬과 다른 이름으로 태그 전송
 +
 +
 +
 +
 </cli> </cli>
  
Line 230: Line 333:
   * 하나의 프로젝트 여러 명의 개발자   * 하나의 프로젝트 여러 명의 개발자
     * develop 브랜치에서 각 개발자별로 브랜치 생성후 작업 (보통 기능별로 개발자에게 분배) 혹은 develop에서 기능별 브랜치 생성     * develop 브랜치에서 각 개발자별로 브랜치 생성후 작업 (보통 기능별로 개발자에게 분배) 혹은 develop에서 기능별 브랜치 생성
 +  * git-flow, github-flow, gitlab-flow 가 조금씩 다르다.
  
 ===== submodule ===== ===== submodule =====
 +  * 저장소를 모듈화, 저장소 분리
 +  * 저장소 하나가 다른 깃 저장소를 포함하는 형태
 +  * 메인 저장소 <-> 부 저장소
 +  * 2개 이상인 저장소를 부모/자식 관계로 연결
 +  * 서버 저장소를 서브폴더 형태로 취급
 +  * .gitmodules
 +  * 메인에서 서브저장소 추가 -> .gitmodules 추가 -> 커밋
 +  * 저장소마다 별도로 커밋 수행
 +  * 메인 저장소는 서브모듈의 변경 내용을 모니터링, 서브모듈이 변경되면 메인 커밋
 +
 +<cli prompt="$ " comment="  # ">
 +$ git submodule -help
 +
 +$ git submodule add 원격저장소URL 폴더이름  # 메인저장소에서 작업, 서브저장소 등록
 +$ git add .gitmodules  # .gitmodules 등록
 +$ git commit -m "add submodule"  # 커밋
 +
 +$ git submodule init  # 서브모듈 초기화, 하위 저장소의 내용을 가져오기 위해. 메인저장소에서 실행
 +$ git submodule update  # 서브모듈 업데이터
 +
 +# submodule 사용시, 아래 두 줄은 세트라고 생각하면 됨.
 +$ git pull origin master
 +$ git submodule update
 +</cli>
  
 ===== fork, pull request ===== ===== fork, pull request =====
 +  * PR(Pull Request) @github, MR(Merge Request) @gitlab
   * fork -> clone forked repository -> make branch and move to branch on forked repository -> coding jobs on branch -> push -> pull request   * fork -> clone forked repository -> make branch and move to branch on forked repository -> coding jobs on branch -> push -> pull request
 +
 +===== Etc =====
 +  * refs, reflog
 +  * file annotation; blame, 
 +  * replace; 기존 커밋을 다른 커밋인 것처럼 변경
 +  * garbage collect; 연결고리가 없는 고립된 객체들, 주로 리셋/리베이스 등을 자주할 때 발생
 +  * prune
 +  * rerere(reuse recorded resolution); 어떤 문제로 충돌이 발생할 때 이를 기록
 +
 +<cli prompt="$ " comment="  # ">
 +$ git rev-parse 브랜치이름  # 브랜치이름의 해시값 확인
 +$ git show 해시값
 +
 +$ ls .git/refs -all  # 저장소 refs 파일 목록
 +
 +$ git reflog  # reflog, 시스템에서 정의한 며칠 간의 기록만 보관
 +
 +$ git blame 파일이름  # 누가 코드의 어느 라인을 수정했는지 파악할 때 유용
 +$ git blame -L 시작줄,마지막줄 파일이름. -e: 사용자 이름 대신 이메일 출력, -w: 공백 문자 무시, -M: 같은 파일 내에서 복사나 이동 감지, -C: 다른 파일에서 이동이나 복사된 것을 감지
 +
 +$ git replace 커밋ID1 커밋ID2  # 커밋ID1 -> 커밋ID2 연결
 +
 +$ git gc --auto  
 +
 +$ git prune --dry-run --verbose  # 객체 삭제, --dry-run: 실행하지 않고 작업할 내역만 출력, --verbose: 작업한 결과 출력
 +$ git reflog expire --expire=now  --expire-unreachable-now --all  # reflog 삭제
 +$ git prune --expire now -v  # 객체 삭제 실행
 +
 +$ git remote prune  # 원격 저장소의 브랜치를 병합한 후 삭제, 삭제된 원격 저장소 브랜치는 더이상 참조할 수 없다
 +$ git fetch --prune  # 오래된 브랜치 정리
 +
 +$ git config rerere.enabled true  # rerere 기능 사용, --global 옵션 가능
 +$ git rerere status  # 상태
 +
 +</cli>
  
  
Line 365: Line 529:
 references references
 </cli> </cli>
-pro git 한글판 http://git-scm.com/book/ko/ +  * pro git 한글판 http://git-scm.com/book/ko/ 
-git 간편안내서 http://rogerdudler.github.io/git-guide/index.ko.html +  git 간편안내서 http://rogerdudler.github.io/git-guide/index.ko.html 
  
 +  * [[https://shanepark.tistory.com/214|Sourcetree 에서 잘못된 비밀번호로 저장소 접근 안될때 해결방법]]
 +  * [[https://zi-c.tistory.com/entry/Sourcetree%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-git-merge-commit-conflict-%EC%B6%A9%EB%8F%8C-%ED%95%B4%EA%B2%B0|Sourcetree를 활용한 git merge commit conflict 충돌 해결]]
 +  * [[https://gitabout.com/8|Git commit 되돌리기 명령어 Reset 과 Revert]]
 +  * [[https://github.com/k88hudson/git-flight-rules|Flight rules for Git]]
 +  * [[https://velog.io/@u-nij/Git-Flow-Commit-message-Issue-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-%ED%98%91%EC%97%85%ED%95%98%EA%B8%B0|Git-Flow & Commit message & Issue 이용해서 협업하기]]
 +  * [[https://hyeonic.tistory.com/181|[git, github] git issue 생성 및 작성 방법 (1)]]
  
  • public/computer/git.1629617828.txt.gz
  • Last modified: 2021/08/22 16:37
  • by alex