커밋 관련
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
를 줄 수 있다.
Command | Scope | Common use cases |
---|
git reset | Commit-level | Discard commits in a private branch or throw away uncommited changes |
git reset | File-level | Unstage a file |
git checkout | Commit-level | Switch between branches or inspect old snapshots |
git checkout | File-level | Discard changes in the working directory |
git revert | Commit-level | Undo commits in a public branch |
git revert | File-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