사용자 도구

사이트 도구


git:cheatsheet

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
git:cheatsheet [2020/02/12 09:51]
kwon37xi [받기]
git:cheatsheet [2024/02/06 09:18] (현재)
kwon37xi [Git Cheatsheet]
줄 3: 줄 3:
   * ''git clone [저장소주소] [디렉토리명]'' : "디렉토리명"으로 저장소 복제   * ''git clone [저장소주소] [디렉토리명]'' : "디렉토리명"으로 저장소 복제
   * ''git clone %%--%%depth 1 [저장소주소] [디렉토리명]'' : "디렉토리명"으로 저장소를 복제하는데, 히스토리는 복제하지 않는다(빠르다).   * ''git clone %%--%%depth 1 [저장소주소] [디렉토리명]'' : "디렉토리명"으로 저장소를 복제하는데, 히스토리는 복제하지 않는다(빠르다).
 +  * ''git clone %%--%%branch <branchname/tagname> [저장소주소]'' : 특정 branch/tag 를 클론한다.
 ===== 설정 보기 ===== ===== 설정 보기 =====
 <code sh> <code sh>
줄 14: 줄 14:
   * ''git commit -m "메시지"'' : 로컬 커밋   * ''git commit -m "메시지"'' : 로컬 커밋
   * ''git push [origin]'' : 원격 저장소 origin으로 Push   * ''git push [origin]'' : 원격 저장소 origin으로 Push
 +
 +===== commit template =====
 +  * 기본적으로 ''commit.template'' 설정에 있는 파일을 템플릿으로 사용한다.
 +  * ''git commit -t <file>''/''git commit --template=<file>'' 로 명시적 지정도 된다.
 +  * ''#'' 는 주석이다.
 +
  
 ===== 받기 ===== ===== 받기 =====
줄 25: 줄 31:
   * ''git status'' : 워킹 디렉토리 상태 보기   * ''git status'' : 워킹 디렉토리 상태 보기
   * ''git diff 커밋ID_1 커밋ID_2 [파일명]'' :  두 커밋로그 사이의 차이점 비교. 파일명을 지정하면 두 커밋간 해당 파일의 차이점 비교   * ''git diff 커밋ID_1 커밋ID_2 [파일명]'' :  두 커밋로그 사이의 차이점 비교. 파일명을 지정하면 두 커밋간 해당 파일의 차이점 비교
 +  * ''git diff HEAD^ [파일명]'' : 직전 커밋과의 비교
 +  * ''git diff HEAD^ HEAD^^ [파일명]'' : 직전과 그 직전 커밋과의 비교
   * ''git blame 파일'' : 파일을 누가 언제 고쳤는지 보여줌.   * ''git blame 파일'' : 파일을 누가 언제 고쳤는지 보여줌.
   * ''git diff 브랜치1..브랜치2'' : 두 브랜치간의 비교   * ''git diff 브랜치1..브랜치2'' : 두 브랜치간의 비교
줄 30: 줄 38:
   * ''git diff %%--%%name-status 브랜치1..브랜치2'' : 두 브랜치간의 변경된 파일 목록과 상태. ''%%--%%name-only'' 옵션은 파일 이름만 출력.   * ''git diff %%--%%name-status 브랜치1..브랜치2'' : 두 브랜치간의 변경된 파일 목록과 상태. ''%%--%%name-only'' 옵션은 파일 이름만 출력.
   * ''git diff %%--%%stat %%--%%color 브랜치1..브랜치2'' : 두 브랜치간의 차이를 컬러 차트로 보여줌.   * ''git diff %%--%%stat %%--%%color 브랜치1..브랜치2'' : 두 브랜치간의 차이를 컬러 차트로 보여줌.
-  * ''%%git log --graph --left-right --cherry-pick --oneline 브랜치1...브랜치2%%'' 
   * ''git diff %%--%%name-only [COMMIT1] [COMMIT2]'' : 두 커밋간의 변경된 파일 목록   * ''git diff %%--%%name-only [COMMIT1] [COMMIT2]'' : 두 커밋간의 변경된 파일 목록
   * ''git diff %%--%%name-only HEAD~10 HEAD~5'' : 헤드에서 10번째 커밋과 헤드에서 5번째 커밋간의 변경된 파일 목록   * ''git diff %%--%%name-only HEAD~10 HEAD~5'' : 헤드에서 10번째 커밋과 헤드에서 5번째 커밋간의 변경된 파일 목록
 +  * ''git diff %%--%%staged'' : 이미 commit 된 것과 staged 된 파일의 변경 비교
 +  * ''git log branchA..branchB'' : 두 브랜치간의 commit 목록 diff.
 +    * ''git log 더적은쪽브랜치..더큰브랜치'' : 두 브랜치가 포함관계일 때 더적은쪽을 왼쪽에 둬야했음.
 +    * ''git log %%--oneline --no-merges --no-decorate%% branchA..BranchB'' : 두 브랜치간의 commit 목록 diff 인데 머지 커밋은 제외
 +    * ''%%git log --graph --left-right --cherry-pick --oneline 브랜치1...브랜치2%%'' : 브랜치간 빠진 커밋 찾기 diff 와 같은듯. cherry-pick 으로 이 브랜치 저 브랜치 머지하다가 누락된곳 찾기?
 +    * [[https://stackoverflow.com/questions/13965391/how-do-i-see-the-commit-differences-between-branches-in-git|branch - How do I see the commit differences between branches in git? - Stack Overflow]]
 +    * 차이나는 Jira 이슈 번호만 뽑기<code sh>
 +git log --oneline --no-merges --no-decorate 브랜치1..브랜치2 \
 +    | grep -o "[A-Z]\{6\}-[0-9]\{4\}" | sort | uniq
 +</code>
 +
 +===== 파일 보기 view / show =====
 +  * ''git show [커밋ID]:/path/to/file'' : 특정 커밋에서의 파일의 내용을 보여줌
 +
 ===== Log ===== ===== Log =====
   * ''git log [파일]'' : 특정 파일 혹은 워킹 디렉토리에 대한 커밋 로그를 보여줌   * ''git log [파일]'' : 특정 파일 혹은 워킹 디렉토리에 대한 커밋 로그를 보여줌
     * ''git log -숫자'' : 최근 **숫자** 갯수만큼의 로그만 보여줌     * ''git log -숫자'' : 최근 **숫자** 갯수만큼의 로그만 보여줌
   * ''git log %%--%%full-history [파일]'' : 사라진 커밋 히스토리까지 다 보여준다.   * ''git log %%--%%full-history [파일]'' : 사라진 커밋 히스토리까지 다 보여준다.
-  * ''git log %%--%%author="Jon"'' : 특정 사용자로 커밋 로그 검색+  * ''%%git log --author="Jon"%%'' : 특정 사용자로 커밋 로그 검색
   * ''git log %%--%%grep="정규표현식"'' : 정규표현식을 만족하는 커밋 메시지가 있는 로그를 보여줌   * ''git log %%--%%grep="정규표현식"'' : 정규표현식을 만족하는 커밋 메시지가 있는 로그를 보여줌
     * ''%%--%%all-match'' : 모든 ''%%--%%grep'' 옵션을 다 만족시키는 것만 검색.     * ''%%--%%all-match'' : 모든 ''%%--%%grep'' 옵션을 다 만족시키는 것만 검색.
줄 77: 줄 98:
   * [[http://stackoverflow.com/a/1320317/1051402|How do I change the author of a commit in git?]]   * [[http://stackoverflow.com/a/1320317/1051402|How do I change the author of a commit in git?]]
   * 여러개의 커밋에 대한 변경 <code sh>   * 여러개의 커밋에 대한 변경 <code sh>
 +# 특정 commit 지정할 경우
 +git rebase -i -p 원하는커밋바로앞커밋hash ## 바로 앞!!! ##
 +
 # 특정 갯수 지정할 경우 # 특정 갯수 지정할 경우
 git rebase -i HEAD~갯수 git rebase -i HEAD~갯수
줄 82: 줄 106:
 git rebase -i $parent_of_flawed_commit git rebase -i $parent_of_flawed_commit
 # 여기서 나온 편집기 화면에서 고치고자 하는 커밋을 pick 대신 edit로 수정한다. # 여기서 나온 편집기 화면에서 고치고자 하는 커밋을 pick 대신 edit로 수정한다.
 +# ------------------------------
 # 이제 작성자 변경작업 # 이제 작성자 변경작업
 git commit --amend --author "New Author Name <email@address.com>"  git commit --amend --author "New Author Name <email@address.com>" 
 git rebase --continue git rebase --continue
 +
 +# 이미 push 된 상황이면 --force 로 push 해야만 함.
 +git push --force
 </code> </code>
   * 가장 최근 한 개만 변경<code sh>   * 가장 최근 한 개만 변경<code sh>
줄 98: 줄 125:
 # 맨 처음 커밋로그(합쳐진 결과가 될 커밋)을 제외하고 "squash"로 변경하고 저장. # 맨 처음 커밋로그(합쳐진 결과가 될 커밋)을 제외하고 "squash"로 변경하고 저장.
 </code> </code>
 +  * 절대 이미 push 해버린 커밋들을 합치지 말 것.
 +
 +===== 마지막 커밋에 신규 변경사항 추가로 넣기 (Push 전) =====
 +  * 아지 **Push하기 전**이라면 마지막 커밋후 추가 변경사항을 마지막 커밋에 더 추가할 수 있다.
 +  * [[https://medium.com/@igor_marques/git-basics-adding-more-changes-to-your-last-commit-1629344cb9a8|Git Basics: Adding more changes to your last commit | by Igor Marques da Silva | Medium]]
 +<code sh>
 +# 변경을 추가하고
 +git add changelog.md
 +# 마지막 커밋에 넣는다. commit message를 신규로 작성해야 한다.
 +git commit --amend
 +
 +# commit message는 그대로 두고 싶다면
 +git commit --amend --no-edit
 +</code>
 +
 ===== 변경 파일 취소 (Revert) ===== ===== 변경 파일 취소 (Revert) =====
   * [[http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html|git howto: revert a commit already pushed to a remote repository]]   * [[http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html|git howto: revert a commit already pushed to a remote repository]]
-  * **''git fetch origin; git reset %%--%%hard origin/master''** : 커밋을 모두 취소하고 ''origin/master'' 상태로 변경+  * **''git fetch origin; git reset %%--%%hard origin/<BRANCH>''** : 커밋을 모두 취소하고 ''origin/<BRANCH>'' 상태로 변경
   * push 되지 않은 commit들 취소할 때 커밋되지 않은 변경사항들 유지하기<code sh>   * push 되지 않은 commit들 취소할 때 커밋되지 않은 변경사항들 유지하기<code sh>
 # 커밋 외의 변경사항이 있을 때 변경 사항들을 stash 해 두어야 한다. # 커밋 외의 변경사항이 있을 때 변경 사항들을 stash 해 두어야 한다.
줄 112: 줄 154:
   * ''git reset %%--%%hard HEAD'' : 커밋 되지 않은 모든 변경사항 취소. 최종 커밋한 상태로 돌아감.   * ''git reset %%--%%hard HEAD'' : 커밋 되지 않은 모든 변경사항 취소. 최종 커밋한 상태로 돌아감.
   * ''git reset HEAD [파일]'' : 스테이지에 올라간 파일을 스테이지에서 뺌(파일 자체는 변경 상태 유지)   * ''git reset HEAD [파일]'' : 스테이지에 올라간 파일을 스테이지에서 뺌(파일 자체는 변경 상태 유지)
-  * ''git rest %%HEAD^%%'' : 마지막 커밋을 커밋하기 전 상태로 되돌린다.(파일을 빼먹고 커밋했거나 한 경우)+  * ''git rest %%HEAD^%%''push 전에 마지막 커밋을 취소시키되, 변경을 그대로 유지하게 되돌린다.(파일을 빼먹고 커밋했거나 한 경우)
   * ''git revert [commit_id ...]'' : 특정 커밋의 변경 사항을 되돌리며, 되돌리는 행위 자체를 하나의 새로운 커밋으로 만든다. 실제 기존 커밋 히스토리가 사라지지는 않는다. 이미 Push된 커밋도 가능.   * ''git revert [commit_id ...]'' : 특정 커밋의 변경 사항을 되돌리며, 되돌리는 행위 자체를 하나의 새로운 커밋으로 만든다. 실제 기존 커밋 히스토리가 사라지지는 않는다. 이미 Push된 커밋도 가능.
   * [[http://git-scm.com/blog/2010/03/02/undoing-merges.html|Undoing Merges]]<code sh>   * [[http://git-scm.com/blog/2010/03/02/undoing-merges.html|Undoing Merges]]<code sh>
줄 123: 줄 165:
     * ''git clean -d -f'' : 디렉토리까지 삭제     * ''git clean -d -f'' : 디렉토리까지 삭제
     * 여기에 ''-x'' 옵션을 주면 ignore된 파일들까지 모두 삭제     * 여기에 ''-x'' 옵션을 주면 ignore된 파일들까지 모두 삭제
 +  * upstream 과 동일하게 변경(push 안된 commit 까지 모두 취소)<code sh>
 +# 현재 develop 브랜치일 때
 +git fetch origin develop
 +git reset --hard origin/develop
 +git clean -d --force
 +</code>
 +
 ===== 신규 프로젝트 올리기 ===== ===== 신규 프로젝트 올리기 =====
 이미 파일이 많은 신규 프로젝트를 Git 리포지토리로 올리는 작업이 필요한 경우. [[http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-push/|Git – setting up a remote repository and doing an initial push]] 이미 파일이 많은 신규 프로젝트를 Git 리포지토리로 올리는 작업이 필요한 경우. [[http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-push/|Git – setting up a remote repository and doing an initial push]]
줄 148: 줄 197:
 ===== Branch ===== ===== Branch =====
   * ''git branch -vv'' : 브랜치의 상세 정보 출력. upstream 까지 보여줌   * ''git branch -vv'' : 브랜치의 상세 정보 출력. upstream 까지 보여줌
 +  * ''git branch %%--show-current%%'' : 현재 브랜치 이름
   * ''git branch'' : 브랜치 정보 출력   * ''git branch'' : 브랜치 정보 출력
   * ''git branch 이름'' : 새 브랜치 만들기   * ''git branch 이름'' : 새 브랜치 만들기
-  * ''git checkout 이름'' : 브랜치 체크아웃 +  * ''git checkout 이름''예전 방식 
-  * ''git checkout -b 이름'' : 브랜치 생성하고 체크아웃 시에+    * local 브랜치가 존재할 경우에는 해당 브랜치를 체크아웃 한다. 
 +    local 브랜치가 존재하지 않고 remote 에 일치하는 이름의 브랜치가 딱 하나 존재하면 local 브랜치를 생성하고 remote 브랜치를 tracking 한다. 즉, ''git checkout -b <branch> %%--track%% <remote>/<branch>'' 명령이 자동 실행된다.(''%%--guess%%''옵션 기본적용) 
 +  * ''git switch 이름''해당 브랜치로 스위치. ''checkout''에서 브랜치 관련된 기능만 수행하는 버전. 
 +    * local 브랜치가 존재할 경우 해당 브랜치로 스위치 
 +    * local 브랜치가 존재하지 않고 remote 에 일치하는 이름의 브랜치가 딱 하나 존재하면 local 브랜치를 생성하고 remote 브랜치를 tracking 한다. 즉, ''git switch -c <branch> %%--track%% <remote>/<branch>'' 로 작한다.(''%%--%%guess''옵션 기본적용) 
 +  * ''git switch -c 이름'' : 브랜치 생성하고 해당 브랜치로 스위치 
 +    * ''git checkout -b 이름'' : 예전 방식
   * ''git checkout -'' : 직전 브랜치 체크아웃   * ''git checkout -'' : 직전 브랜치 체크아웃
   * ''git branch -d 이름'' : 브랜치 삭제, ''-D''는 강제 삭제   * ''git branch -d 이름'' : 브랜치 삭제, ''-D''는 강제 삭제
줄 159: 줄 215:
   * ''git branch -a'' : 전체 브랜치(리모트 포함) 목록   * ''git branch -a'' : 전체 브랜치(리모트 포함) 목록
   * ''git branch -r'' : 리모트 브랜치 목록   * ''git branch -r'' : 리모트 브랜치 목록
-  * ''git remote prune origin''원격서 삭제된 리포지토리를 로에서도 삭제.+  * ''git remote prune origin''정확한 의미 확인 필요. origin 에 브랜치가 없는데 local 에 연결이 있을 경우 이를 끊어주는 역할인듯. 실제로 local branch 를 삭제하는게 아님. 
 + 
 +===== master to main 변경 ===== 
 +  * [[https://www.r-bloggers.com/2020/07/5-steps-to-change-github-default-branch-from-master-to-main/|5 steps to change GitHub default branch from master to main | R-bloggers]] 
 +  * local master -> main 변경하기.  
 +<code sh> 
 +아래 명령을 실행하면 master 브랜치의 모든 커밋등이 main으로 넘어간다. 
 +git branch -m master main 
 + 
 +# 올기 
 +git push -u origin main 
 + 
 +# HEAD를 main으로 변경 
 +git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main 
 + 
 +# github/gitlab 등에서 기본 브랜치 변경 
 +# master 브랜치 삭제 
 +git push origin --delete master 
 + 
 +# 확인 
 +git branch -a 
 +</code> 
 + 
 + 
 ===== Remote Branch ===== ===== Remote Branch =====
   * 로컬 브랜치를 만들어 작업하고 나서 다음과 같이 작업한다. ''origin''은 원격지 이름으로 대체될 수 있다.   * 로컬 브랜치를 만들어 작업하고 나서 다음과 같이 작업한다. ''origin''은 원격지 이름으로 대체될 수 있다.
-  * **''git checkout %%--%%track origin/serverfix''** : 원격 브랜치를 브랜치 이름 그대로 생성하며 체크아웃. +  * **''git switch -origin/serverfix''** : 원격 브랜치를 브랜치이름 그대로 생성하며 체크아웃. 
-  * **''git checkout -[localbranchname] origin/[remotebranchname]''** : 원격 브랜치를 로컬 브랜치를 생성하며 체크아웃한다. 로컬 브랜치 이름을 다르게 가져갈 수 있다.+    * **''git checkout %%--%%track origin/serverfix''** : 옛날방식 
 +  * ''**git switch -c [localbranchname] -t origin/[remotebranchname]**'' : 원격 브랜치를 로컬 브랜치를 생성하며 체크아웃한다. 로컬 브랜치 이름을 다르게 가져갈 수 있다. 
 +    * **''git checkout -b [localbranchname] origin/[remotebranchname]''** : 옛날방식
   * ''git push %%--%%set-upstream origin [remotebranchname]'' : 현재 브랜치를 원격 브랜치에 연결하고 푸시한다.   * ''git push %%--%%set-upstream origin [remotebranchname]'' : 현재 브랜치를 원격 브랜치에 연결하고 푸시한다.
   * ''git push origin [remotebranchname]'' : 원격브랜치로 push. 원격브랜치가 없으면 만든다.   * ''git push origin [remotebranchname]'' : 원격브랜치로 push. 원격브랜치가 없으면 만든다.
줄 170: 줄 252:
   * ''git push origin **:**[remotebranchname]'' : 원격 브랜치 삭제. 중간의 콜론(**:**)이 있다는 점에 주의할 것.   * ''git push origin **:**[remotebranchname]'' : 원격 브랜치 삭제. 중간의 콜론(**:**)이 있다는 점에 주의할 것.
   * ''git clone -b [remotebranchname] [remote_repo 주소]'' : 원격 브랜치를 바로 clone 한다.   * ''git clone -b [remotebranchname] [remote_repo 주소]'' : 원격 브랜치를 바로 clone 한다.
-  * ''git branch %%--%%set-upstream [localbranchname] origin/[remotebranchname]'' : 로컬 브랜치와 리모트 브랜치간의 연결+  * ''git branch %%--%%track [localbranchname] origin/[remotebranchname]'' : 로컬 브랜치와 리모트 브랜치간의 연결
  
 ===== 2개 이상의 Remote 사용 ===== ===== 2개 이상의 Remote 사용 =====
줄 208: 줄 290:
   * [[https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/syncing-a-fork|Syncing a fork - GitHub Help]]   * [[https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/syncing-a-fork|Syncing a fork - GitHub Help]]
 ===== Rebase ===== ===== Rebase =====
 +  * [[https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-Rebase-%ED%95%98%EA%B8%B0|Git - Rebase 하기]]
 +
 +> **이미 공개 저장소에 Push 한 커밋을 Rebase 하지 마라**
 +> 이 지침만 지키면 Rebase를 하는 데 문제 될 게 없다. 하지만, 이 주의사항을 지키지 않으면 사람들에게 욕을 먹을 것이다.
 +> 일반적인 해답을 굳이 드리자면 로컬 브랜치에서 작업할 때는 히스토리를 정리하기 위해서 Rebase 할 수도 있지만, 리모트 등 어딘가에 **Push로 내보낸 커밋에 대해서는 절대 Rebase 하지 말아야 한다.**
 +
   * [[http://dogfeet.github.io/articles/2012/git-merge-rebase.html|Rebase는 언제 어떻게 해야 할까?]]   * [[http://dogfeet.github.io/articles/2012/git-merge-rebase.html|Rebase는 언제 어떻게 해야 할까?]]
   * **rebase라는 것은 현재 브랜치의 base가 되는 뿌리 커밋을 바꿔친다는 뜻이다.**   * **rebase라는 것은 현재 브랜치의 base가 되는 뿌리 커밋을 바꿔친다는 뜻이다.**
줄 224: 줄 312:
   * ''%%--%%preserve-merges'' : rebase 시에 머지 커밋을 유지한다.   * ''%%--%%preserve-merges'' : rebase 시에 머지 커밋을 유지한다.
 ===== Tag ===== ===== Tag =====
 +  * ''git fetch %%--tags%%'' : remote tag 목록 가져오기
   * ''git tag -l'' : 태그의 목록을 보여준다.   * ''git tag -l'' : 태그의 목록을 보여준다.
   * ''git tag -a [tagname] [commit] -m "태그 설명"'' : commit을 지정하지 않으면 현재 커밋.   * ''git tag -a [tagname] [commit] -m "태그 설명"'' : commit을 지정하지 않으면 현재 커밋.
 +  * ''git checkout tags/[tagname] -b [branchname]'' : 태그이름으로 로컬 브랜치를 체크아웃한다.
   * ''git checkout [tagname]'' : 태그 목록의 태그 이름을 이용해 해당 태그를 체크아웃한다.   * ''git checkout [tagname]'' : 태그 목록의 태그 이름을 이용해 해당 태그를 체크아웃한다.
   * ''git tag -d [tagname]'' : 태그 삭제   * ''git tag -d [tagname]'' : 태그 삭제
줄 232: 줄 322:
   * ''git push origin :[tagname]'' : 리모트 태그 삭제   * ''git push origin :[tagname]'' : 리모트 태그 삭제
   * ''git push %%--%%delete origin [tagname]'' : 리모트 태그 삭제   * ''git push %%--%%delete origin [tagname]'' : 리모트 태그 삭제
 +  * ''%%git describe --tags `git rev-list --tags --max-count=1`%%'' : 가장 최근 태그
 +  * ''%%git ls-remote --sort='version:refname' --tags [remoteurl] | tail --line=1 | cut --delimiter='/' --fields=3%%'' 원격 저장소에서 clone 받지 않고서 가장 최근 tag 가져오기
 +    * https://stackoverflow.com/a/12704727/1051402
 +
 ===== Merge ===== ===== Merge =====
   * ''git merge [내용을 가져올 브랜치명]'' : 특정 브랜치를 현재 브랜치에 Merge   * ''git merge [내용을 가져올 브랜치명]'' : 특정 브랜치를 현재 브랜치에 Merge
줄 238: 줄 332:
   * ''git merge -Xignore-space-change [내용을 가져올 브랜치명]'' : 머지할 때 공백을 무시한다. ''-Xignore-all-space'' 도 가능. ''rebase''시에도 동일한 방법으로 사용한다.   * ''git merge -Xignore-space-change [내용을 가져올 브랜치명]'' : 머지할 때 공백을 무시한다. ''-Xignore-all-space'' 도 가능. ''rebase''시에도 동일한 방법으로 사용한다.
   * ''-Xignore-space-at-eol'' 참조   * ''-Xignore-space-at-eol'' 참조
 +  * ''git merge --abort'' : 머지 중간 상태일 때 취소
 +  * ''git reset --hard HEAD'' : 머지 중간 상태일 때 취소
 ===== Stash ===== ===== Stash =====
   * [[http://devyongsik.tistory.com/617|Git stash 사용 예]]   * [[http://devyongsik.tistory.com/617|Git stash 사용 예]]
줄 301: 줄 397:
 git config --global alias.visual '!gitk' git config --global alias.visual '!gitk'
 </code> </code>
 +
 +===== ignore =====
 +  * ''.gitignore'' : 특정 프로젝트 root 에 두고 해당 프로젝트의 모든 개발자가 공유하는 ignore 목록
 +  * ''.gitignore''를 직접 편집 못할경우 ''.git/info/exclude'' 파일에 추가해주면 본인만 제외 처리할 수 있다.
 +  * ''core.excludesfile'' : 본인 계정에 전역으로 ignore
 +
 +<code sh>
 +git config --global core.excludesfile ~/.gitignore-global
 +</code>
 +===== 참조 =====
 +  * [[https://ujuc.github.io/2020/07/04/git-switch-n-restore-hurt-eo-bo-gi/|git switch, restore 훑어보기]]
 +  * [[https://yangeok.github.io/git/2020/10/24/git-rebase.html|Git rebase로 협업 고수되기]]
 +  * [[https://devconnected.com/how-to-checkout-git-tags/|How To Checkout Git Tags – devconnected]]
git/cheatsheet.1581468709.txt.gz · 마지막으로 수정됨: 2020/02/12 09:51 저자 kwon37xi