Post

(Git) 자주쓰는 command

커밋 관련

커밋 히스토리 조회

1
2
3
git diff
git log
git log -p [-숫자]

commit 합치기 - rebase

commit할 때 뭔가 커밋 단위가 너무 작아서 여러개의 커밋을 묶고 싶을 때 사용한다.

1
git rebase -i feature1 ~ 4    # feature1 브랜치 최상위 커밋부터 아래 4번째 커밋까지 합친다.

source tree 이용하면 간단

[!warning] 여럿이서 작업하는데 remote에 올라간 커밋을 rebase해서 합쳐버리는 경우 문제가 생길 수 있음.
그래서 로컬에서 commit만 하면서 작업하다, 어느정도 작업이 끝나면 push하기 전 rebase로 커밋을 묶은 다음 push하는 방법을 사용한다.

커밋 취소

로컬에서 수정한 파일 다시 되돌리기

1
2
3
git reset HEAD file
git checkout -- file
git checkout . (커밋 안된 작업 내용 전체 삭제)

로컬에서 수정한거 유지하면서 커밋만 뒤로 되돌려서 다시 커밋하고 싶을 때

1
git reset --soft HEAD~1

커밋을 아예 취소하고 로컬 저장소와 github를 모두 이전 상태로 되돌리기

1
2
git reset --hard HEAD~1     // HEAD가 이전 커밋을 가리키게 된다.
git push origin -f
  • 이전 커밋으로 되돌린 다음 push하려고 하면 현재 branch가 더 뒤에 있기 때문에 에러가 발생한다.
    • 기본적으로 fast-forward하도록 되어 있기 때문에 먼저 git pull하라고 나온다.
  • 그래서 반드시 origin -f를 주어야 한다.
  • * reset의 기본 옵션은 --mixed이며 상황에 따라 --soft를 줄 수 있다.

Reset과 checkout의 차이

CommandScopeCommon use cases
git resetCommit-levelDiscard commits in a private branch or throw away uncommited changes
git resetFile-levelUnstage a file
git checkoutCommit-levelSwitch between branches or inspect old snapshots
git checkoutFile-levelDiscard changes in the working directory
git revertCommit-levelUndo commits in a public branch
git revertFile-level(N/A)

롤백 하기 (with GitKraken)

여러 브랜치가 섞여서 머지되어 있는 경우, 그리고 어떤 브랜치는 롤백해야 하는 브랜치를 시작지점으로 삼아 작업이 된 경우.

롤백해야 하는 부분을, 가장 최근 커밋부터 하나 씩 revert 해나가면 문제되는 부분만 롤백할 수 있다.

Branch 관련

branch 확인 및 변경

1
2
3
git branch -r   // branch list 확인
git checkout --track <branch\_path>    // branch 변경
git branch      // 현재 선택된 작업 branch 확인

다른 hub의 프로젝트 ( telegram같은 ) 를 가져올 때는 github 홈페이지에서 clone해야 한다. 그냥 clone이나 remote하면 그 hub에 remote 연결돼서 그 쪽으로 push하게됨.

branch 생성

1
2
3
git checkout -b umbum    // 먼저 local에 만들어주고
git push origin umbum    // remote에도 생성
git branch --set-upstream-to origin/umbum   // local과 remote를 연결해서 remote쪽으로 push 할 수 있도록 설정

branch 삭제

1
2
3
git branch -d umbum    // 먼저 로컬에서 삭제하고
git push origin :umbum    // 로컬에서 삭제한걸 remote에 반영(remote에서 삭제)
git push origin --delete issue/porting\_umbum     // 로컬은 놔두고 remote에서 삭제.

branch merge (develop 브랜치와 동기화하기)

1
(feature/#5) $ git merge develop

브랜치 때문에 런타임에 에러가 발생할 수도 있다.

  • 어떤 브랜치1에서 컴파일 해서 target 폴더가 생성된다.
  • 이 때 b1.properties 값들이 세팅된 상태로 컴파일 된다.
  • 브랜치2로 변경한다.
  • target 폴더는 보통 ignore 되어 있어서 checkout 해도 바뀌지 않는다. 즉, 브랜치1에서 컴파일한 그대로다
  • 브랜치2에서 컴파일 할 때, b2.properties에 있는 값들을 세팅하고 컴파일 해야 하는데, IDE가 소스에 변경이 없다고 판단하는 경우 그냥 컴파일이 되지 않는 부분도 있다.
  • 그래서 b1.properties에 세팅된 값으로 컴파일된 부분이 그대로 남아있을 수 있다.
  • 이렇게 되면 런타임에 에러가 발생한다.

기타

이미 만들어진 저장소를 remote와 연결

  • 리모트 저장소
  • alias는 보통 origin으로 쓰지만 로컬에서만 사용하는거니까 아무거나 해도 상관없다.
1
2
3
4
git init
git remote add alias url
git remote -v
git pull alias branch    OR    git fetch alias

Tag 관련

http://minsone.github.io/git/git-addtion-and-modified-delete-tag

README에 badge image 달기

https://shields.io/

Intellij project하나 만들고 빈 Github repository와 연결

https://secuinfo.tistory.com/entry/Intellij-Github-Link

This post is licensed under CC BY 4.0 by the author.