목차

Git Cheatsheet

설정 보기

git config --list --local # 현재 저장소 설정
git config --list --global # 공통 설정

올리기

commit template

받기

비교

파일 보기 view / show

Log

사라지는 Commit

가끔씩 Commit이 사라지고 git log --full-history [파일] 명령으로 로그를 봐야 커밋 히스토리가 보이는 경우가 발생한다. 이는 브랜치 Merge 시에 다른 사람의 작업(없어진 커밋)과 충돌이 났을 때 IntelliJ로 치면 Accept yours 혹은 Accept theirs 처럼 특정 작업을 모두 무시하는 Merge를 수행했을 때 발생한다.

특정 커밋으로 소스 전체 변경

삭제

이름 변경(rename)

커밋로그 일괄 변경하기

커밋로그의 Author 일괄 변경하기

커밋로그 합치기

마지막 커밋에 신규 변경사항 추가로 넣기 (Push 전)

# 변경을 추가하고
git add changelog.md
# 마지막 커밋에 넣는다. commit message를 신규로 작성해야 한다.
git commit --amend
 
# commit message는 그대로 두고 싶다면
git commit --amend --no-edit

변경 파일 취소 (Revert)

신규 프로젝트 올리기

이미 파일이 많은 신규 프로젝트를 Git 리포지토리로 올리는 작업이 필요한 경우. Git – setting up a remote repository and doing an initial push

  1. 먼저 Git 원격 리포지토리를 생성한다.
  2. 로컬에서 프로젝트디렉토리로 이동하여 다음과 같이 명령을 실행한다.
    # 프로젝트 이름과 원격 리포지토리 이름이 my_project 일 때
    cd my_project
    git init
     
    # 불필요한 파일들을 모두 정리한 뒤에
    git add * # 혹은 git add --all
    git commit -m '프로젝트 초기 설정'
    git remote add origin [git_repository]/my_project.git
    git push -u origin master
  3. 커밋이 한 개도 없는 원격 리포지토리에 Push를 최초로 할 때는 git push origin masterorigin master를 명시해줘야 한다.(git 1.8 이상에서는 상관 없는 듯)

Remote URL 변경하기

git remote set-url origin git://new.url.here
# origin을 원하는 remote 저장소 이름으로 변경

Branch

master to main 변경

아래 명령을 실행하면 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

Remote Branch

2개 이상의 Remote 사용

Fork 한 Remote 동기화 상세 예제

# 현재 상태의 확인
$ git remote -v
> origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
> origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
 
# 원본을 upstream 으로 추가
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
 
# Remote가 잘 추가 됐는지 확인
$ git remote -v
> origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
> origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
> upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
> upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
 
# upstream 최신화
$ git fetch upstream
 
# 내 리포리토리 master 체크아웃
$ git checkout master
 
# upstream/master 머지 - 끝
$ git merge upstream/master

Rebase

이미 공개 저장소에 Push 한 커밋을 Rebase 하지 마라
이 지침만 지키면 Rebase를 하는 데 문제 될 게 없다. 하지만, 이 주의사항을 지키지 않으면 사람들에게 욕을 먹을 것이다.
일반적인 해답을 굳이 드리자면 로컬 브랜치에서 작업할 때는 히스토리를 정리하기 위해서 Rebase 할 수도 있지만, 리모트 등 어딘가에 Push로 내보낸 커밋에 대해서는 절대 Rebase 하지 말아야 한다.

Tag

Merge

Stash

Patch

ls-files

Local bare repository

Merge branch 'master' of https://xxx...

.gitignore

이미 한 add했던 파일은 ignore해도 적용이 안된다. 캐시돼 있기 때문이라고 한다. 이 때는 다음과 같이 처리한다.

git rm --cached 무시할파일명

alias

# last
git config --global alias.last 'log -1 HEAD'
git config --global alias.lg \
 "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an %ae>%Creset' --abbrev-commit --"
 
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
 
# 외부명령 gitk 혹은 gitg
git config --global alias.visual '!gitk'

ignore

git config --global core.excludesfile ~/.gitignore-global

참조