[Git] Commands

hyozkim·2020년 12월 5일
1
post-thumbnail

Create Project & Init, Commit Process

자주 사용하는 명령어

git init

git remote add origin [github url]

git add *

git commit -m "~~"

git push origin master

계정 인증 명령어

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

Frequently Used Command

git clone [git_path] // 코드 가져오기

git checkout [branch_name] // 브랜치 선택하기

git branch [branch_name] // 브랜치 생성하기
git branch -r // 원격 브랜치 목록 보기
git branch -a // 로컬 브랜치 목록 보기

git branch -m [origin_name] [tobe_name] // 브랜치 이름 바꾸기
git branch -d [name] // 브랜치 삭제하기

git add [file_names] // 수정한 코드 선택하기 (git add *)
git commit -m "description" // 선택한 코드 설명적기

git push [remote_name] [branch_name] // add & commit한 코드 원격 서버에 업데이트

git pull   // git 서버에서 최신 코드 받아와 merge 하기
git fetch // git 서버에서 최신 코드 받아오기

Cancel Commit

코드 되돌리기

코드를 작성하다보면 잘못된 코드를 add하거나 merge할 수 있다.
이를 취소하고 싶다면, git reset으로 취소가능.

git reset // add 한 파일 취소
git reset -merge // merge한 코드 취소

git reset --soft HEAD^ // 최근 커밋하기 전 상태로 되돌림
git reset --mixed HEAD^ // 최근 커밋과 스테이징을 하기 전으로 되돌림
git reset --hard HEAD^ // 최근 커밋과 스테이징, 파일 수정하기 전으로 되돌림

git reset 커밋 해시 // 특정 커밋으로 되돌리기 -> 특정 커밋 이후 삭제
git revert 커밋 해시 // 커밋 삭제하지 않고 되돌리기

Code Stash

코드를 잠깐 저장하고, 다른 브랜치로 이동

Branch A에서 작업하다가 급하게 들어온 요청으로 Branch B로 이동해야할 일이 생겼습니다.
그런데 작업은 완료되지 않아서 commit 해두기는 애매하고, 그렇다고 다시 작업하기에는 작업량이 있어 버릴 수는 없는 경우가 있다.

이때, 다른 공간의 변경내역을 기록해두고 돌아와서 변경내역을 불러와 계속 작업을 이어 나갈 수 있다.

git stash // 코드를 stash 영역에 잠시 저장하기
git stash pop // 마지막에 저장한 코드 불러오기

stash 영역이 기억나지 않는다면 git stash list로 목록을 확인해 볼 수 있다

Rebase & Squash

Rebase를 사용하면 커밋 순서를 변경할 수 있다.

git rebase -i HEAD~2

HEAD를 포함한 이전 2개 커밋을 재작성(rebase) 한다는 뜻.
에디터가 열려 커밋 목록이 나오고 여기서 순서를 변경할 수 있음.

pick 823b71f feat: category 기능 추가
s e3490bd feat: category 기능 추가

# Rebase 57548b1..e3490bd onto 57548b1 (2 commands)

# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
#                    commit's log message, unless -C is used, in which case
#                    keep only this commit's message; -c is same as -C but
#                    opens the editor
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified); use -c <commit> to reword the commit message
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# 여기 줄을 제거하면 해당 커밋을 잃어버립니다!
#
# However, if you remove everything, the rebase will be aborted.

p,r,e,s,f,x,b,d,l,t,m 모두 다 사용해보진 못했지만 필요한 기능에 따라 사용하면 된다.

pick - 다음 커밋을 사용하겠다
s(squash) - 이 커밋도 사용하겠다 but 이전 커밋과 합치겠다

그리고 ESC :wq 입력한 다음 Enter 키를 눌러 변경한 내용을 저장한다. 변경이 완료되면 아래 화면을 따라 작성한 커밋 메시지를 수정하는 단계다.

# 커밋 2개가 섞인 결과입니다.
# 1번째 커밋 메시지입니다:

feat: category 기능 추가

# 커밋 메시지 #2번입니다:

feat: category 기능 추가

# 변경 사항에 대한 커밋 메시지를 입력하십시오. '#' 문자로 시작하는
# 줄은 무시되고, 메시지를 입력하지 않으면 커밋이 중지됩니다.
#
# 시각:      Fri Mar 25 08:16:32 2022 +0900
#
# 대화형 리베이스 진행 중. 갈 위치는 57548b1
# 최근 완료한 명령 (2개 명령 완료):
#    pick 823b71f feat: category 기능 추가
#    squash e3490bd feat: category 기능 추가
# 명령이 남아있지 않음.
# 현재 'feature/category' 브랜치를 '57548b1' 위로 리베이스하는 중입니다.
#
# 커밋할 변경 사항:
#       수정함:        app/views/posts/index.html.erb
#       수정함:        app/views/posts/show.html.erb

아래 화면처럼 사용할 커밋 메세지를 골라 아까와 똑같이 ESC :wq 입력한 다음 Enter 키를 눌러 변경한 내용을 저장한다.

# 커밋 2개가 섞인 결과입니다.
# 1번째 커밋 메시지입니다:

feat: category 기능 추가

# 변경 사항에 대한 커밋 메시지를 입력하십시오.
...

최종적으로 아래 2개의 커밋이 1개의 커밋으로 간단하게 된다.

Reflog

Rebase 내역을 보고 이전으로 되돌아가는 방법

git reflog #{branch 명}

rebase 로그 보는 명령어

git reset --hard #{commit 명}

해당 커밋으로 되돌아 가기

[Furthermore]

git push -f origin #{branch 명}

만약 머지가 되었을때 스쿼시를 한다면 문제가 되겠지만 머지 이전의 신규 커밋이라면 force push 요청.


깨달을때마다 계속 작성중

profile
차근차근 develog

0개의 댓글