Git 기본명령어

# Git내려받기
git clone "Git URL"
# 도움말
git --help
# 브랜치 보기
git branch
# 다른 브랜치로 이동
git checkout 브랜치명
# 새로운 브랜치 만들기
git checkout -b 브랜치명
# 현재 변경사항 추가하기
git add .
# 추가한 변경사항 커밋하기
git commit -m "커밋명"
# 작업전에 항상 로컬 업뎃하기
git pull --rebase
# 마지막 커밋 삭제 (작업내용유지)
git reset --soft HEAD~1
# 마지막 커밋 삭제 (작업내용삭)
git reset --hard HEAD~1

Master 브랜치에 현재 브랜치 커밋내용 Merge하기

git checkout master
git merge <브랜치명>

커밋

git에 add하기 전의 변경내용 취소

# 파일 한개만 원래 버젼으로 되돌리기
git checkout <file_name>
# 변경된 내용 전부를 원래버젼으로 되돌리기
git checkout --hard

변경내용 전부 적용

git add -A 

git add 한거 취소

git reset 파일명

커밋하기

git commit -m "커밋메세지"

브랜치

원격에 새로운 브랜치를 생성해서 그 안에 현재 커밋 푸쉬하기

git push origin 브랜치명

커밋한거 원격 저장소로 푸시

git push -u origin 브랜치명

원격 저장소에 있던 브랜치 로컬로 내려받기

# 이걸 먼저 해야 다음 명령어 가능
git fetch origin 브랜치명

git checkout -t origin/브랜치명
git branch 로컬브랜치명 origin/브랜치명
git checkout -b 로컬브랜치명 origin/브랜치명

브랜치삭제 (적용 안된 내용이 있으면 삭제가 안됨)

git branch -d 브랜치명

브랜치 강제삭제 (적용안된 내용이 있어도 무조건 삭제됨)

git branch -D 브랜치명

브랜치이름 바꾸기

git branch -m 원래브랜치명 새브랜치명

원격에 있는 브랜치를 로컬에 있는 브랜치로 갈아 엎고 싶을때
주의! 원격에 있는 내용 다 날아감!!

git push --force-with-lease

로컬에 있는 브랜치를 원격에 있는 걸로 갈아 엎고 싶을때
주의! 로컬에 있는 내용 다 날아감!!

git reset --hard origin/master

브랜치를 만들어서 커밋을 몇개 했는데 너무 자질구리해서 전부 묶어서 하나의 커밋으로 master에 merge하고 싶을때

git checkout master
git merge --squash [작업한_브랜치명]
git commit -m "정리된 커밋 메시지 (예: 기능 개발 완료)"

Base브랜치 변경??

git checkout 베이스를바꾸고자하는브랜치
git rebase --onto 새베이스브랜치 현재베이스브랜치

Git tag

# tagging하기
git tag tagname

# tag보기
git tag -1

# tag서버에 올리기
git push origin --tags

# 로컬에 생성한 tag삭제하기
git tag -d tagname

# 이미 서버에 올려버린 tag삭제하기
git push --delete origin 2020-08-25-18-11-35-bbd7d82.rc1

로그

커밋 히스토리 보기

git log

각 브랜치 그림으로 보기

git log --graph --oneline --decorate

커밋한 사람 이름으로 필터링하기

git log --author="Sungok Lim"

Diff Patch

변경된 부분을 하나로 통합하여 새로운 브랜치에 적용하기

# Root폴더에서 실행
cd ~/git/repo

# 다른 코드를 임시 파일에 저장
git diff master mybranch > /tmp/diff.patch

# 새로운 브랜치 생성
git checkout master
git checkout -b newbranch

# Patch 테스트
patch --dry-run -p1 < /tmp/diff.patch

# Patch 실행
patch -p1 < /tmp/diff.patch

# 변경된 내용 확인
git diff

# 변경된 내용 추가
git add .

# 통합 커밋
git commit -m 'My changes'

Cherry Pick

Cherry Pick for Hot Fix! 다른 브랜치에서 특정 커밋만 가져오기

# Cherry Pick을 해서 커밋을 가져오고자 하는 최종목적지 브랜치로 이동한다.
# 보통 Cherry Pick은 Hot Fix에 주로 사용되므로 master에서 실행하겠다.
> git checkout master

# 커밋 히스토리 보기
# --all 옵션을 주어서 다른 브랜치의 로그도 모두 볼수 있도록 한다
> git log --all
commit 5af9a2f979233799d3459fa032632da19561fe7b (HEAD -> myBranch)
Author: Amugae Kijm <akim@company.com>
Date:   Tue May 3 12:42:59 2020 -0400

    Fixing the bug on the new feature

# 다른 브랜치에서 가져올 커밋번호를 찾았다면 
# 해당 커밋번호로 Cherry Pick을 실행한다.
> git cherry-pick 5af9a2f979233799d3459fa032632da19561fe7b

# 로그에서 결과확인
> git log
commit 43196b929e55dafc7352c7b7c7603a22e4122dd9 (HEAD -> master)
Author: Amugae Kijm <akim@company.com>
Date:   Tue May 5 12:42:59 2020 -0400

    Fixing the bug on the new feature

master의 최종 로그에서 보시면요, 가져온 commit의 고유번호가 달라져있는 것을 확인하실수 있으실거에요. 이처럼 Cherry Pick은 실제 커밋을 가져오는게 아니라 해당커밋의 변경된 내용을 가져와서 새로운 commit을 만드는것이기 때문에 나중에 커밋이 중복될수 있다는거 명심하세요.

Fetch an unmerged Pull Request

git fetch origin pull/34/head:34
git checkout 34

Archived: Git