티스토리 뷰

💻/Git

[Git] 명렁어 정리

eungding 2019. 3. 31. 13:51
728x90
반응형

1. Rebase 

사용 case: 

master 브랜치에서 branch1을 생성했다. (branch1의 base는 master의 마지막 커밋-)

근데 master 브랜치에서 어떤 VC의 이름을 바꾸고 싶어서 VC의 이름을 바꾸고 커밋했다 

그러면 branch1이랑 master랑 VC이름이 달라진당---! 

 

그 때 master 브랜치의 VC 이름바꾼 커밋으로 branch1을 rebase시켜준다 (branch1의 base는 master의 VC 이름 바꾼 커밋-)

 

SourceTree에서 branch1을 현재 브랜치로 하고 원하는 커밋을 오른쪽 클릭하여 rebase 눌러주면 된다 :) 

 

 

+

아니면 merge master into 현재브랜치 해도 될 것 같다 

 

 

이렇게 merge해주면 충돌이 날 것 같은데, unstaged에 느낌표와 함께 충돌난 거 오른쪽 클릭하고 

Resolve Conflicts -> Resolve using theirs 선택해서 현재 브랜치 변경사항 삭제하고 master 브랜치 변경사항으로 채택해주면 될듯 --! 

 


+ rebase와 merge의 차이점 

https://backlog.com/git-tutorial/kr/stepup/stepup1_4.html 

 

브랜치 통합하기【브랜치 (Branch)】 | 누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog

브랜치 통합하기【브랜치 (Branch)】 | 누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다!

backlog.com

 

2. Stash

Stash 
1. (안전한 곳에) 넣어 두다
2. 챙겨 둔 양

 

이라는 사전적 의미를 가지고 있다 :)

 

Stash는 아직 커밋하지 않은 내용들 ( staged files과 unstaged files 모두 ) 을 임시로 어딘가에 저장해두는 기능이다

커밋안된 변경사항을 일시적으로 백업하고, 워킹 디렉토리를 깨끗한 상태로 만든다 

 

사용 case:

아직 커밋을 하지 않은 변경사항이 있다. 변경사항이 있는 상태에서 rebase나 pull을 하려면 커밋하지 않은 내역 때문에 충돌이 나면서 실패를 한다. rebase나 pull을 먼저하고 변경사항들을 커밋하고 싶을때 stash를 사용하면 된다.

 

SourceTree 에서 Stash버튼을 누르고 변경사항들을 원하는 Message와 함께 Stash 해둔다. 

 

 

그러면 변경사항들이 사라진다. 그 상태에서 원격 저장소에서 pull을 한다. 그 후 stash해둔 변경사항들을 commit 하면 된다 

File Status에서 stash해둔 변경사항들을 커밋해도 되고 밑의 사진처럼 STASHES 오른쪽 버튼을 눌러서 Apply Stash해도 된다 :) 짱짱

 

+ Stash가 필요한 리얼한 상황들 너무 좋다 :) 

https://wit.nts-corp.com/2014/03/25/1153 

 

git의 요술 책갈피, Stash 기능 소개 « WIT - NTS UIT Blog WIT - NTS UIT Blog

git에는 기본적인 커밋 & 푸시 등의 기능 외에도 수많은 기능들이 있습니다. 그중 매우 유용한 요술 책갈피인 Stash에 대한 소개입니다. 사전적 의미 Stash [stӕʃ] 1. (안전한 곳에) 넣어 두다 2. 챙겨 둔 양   Situations 현업에서 코드를 열심히 개발하다 보면 이런 상황이 왕왕 발생합니다. 상황 1. 신규 프로젝트인 “LetItGo” 프로젝트가 시작됐습니다. 저장소 세팅을 하고 일단 init 커밋 & 푸시를 쏩니다. “이런 이런

wit.nts-corp.com

 

3. Squash

여러개의 커밋을 하나로 합칠 때 사용한다 

 

사용 case :

커밋이 불필요하게 여러 개로 나뉘어져 있다면 squash한다

커밋 그래프를 단순하게 가져가고 의미 있는 커밋들로 관리할 수 있다 


배민에서 squash를 쓰는 case : 

http://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html

 

우린 Git-flow를 사용하고 있어요 - 우아한형제들 기술 블로그

안녕하세요. 우아한형제들 배민프론트개발팀에서 안드로이드 앱 개발을 하고 있는 나동호입니다.오늘은 저희 안드로이드 파트에서 사용하고 있는 Git 브랜치 전략을 소개하려고 합니다. ‘배달의민족 안드로이드 모바일 파트에서 이렇게 브랜치를 관리하고 있구나’ 정도로 봐주시면 좋을 것 같습니다.

woowabros.github.io

 

SourceTree에서 squash하는 법 : 

https://www.lesstif.com/pages/viewpage.action?pageId=24445167

 

소스트리에서 git squash commit 을 이용하여 여러 개의 커밋을 합치고 정리하기

 

www.lesstif.com

 

4. Merge 

https://developer88.tistory.com/153 

 

SourceTree에서 Branch 생성과 병합(Merge) 그리고 충돌(Conflict) 해결 정리

오늘은 SourceTree를 이용해서 Branch를 만들어보는 방법에 대해서 정리해 보도록 하겠습니다. Branch가 무엇인지 간단히 알아보고, SourceTree를 이용해 Branch를 생성하고 Merge하는 과정까지 정리해 보도록 할..

developer88.tistory.com

5. Reset 

커밋했는데 커밋을 취소하고 싶을 때 쓰는 명령어 (커밋하기 전 local change를 취소하고 싶으면 discard 명령어)

가장 최근의 커밋으로 하고 싶은 커밋을 클릭하고 오른쪽 눌러서 'Reset 브랜치이름 to this commit'을 누른다 

그럼 이렇게 세가지 타입의 Reset을 고를 수 있게 되어있다 

1) hard 

 

선택한 커밋의 다음 커밋들을 다 취소한다

즉 선택한 커밋이 가장 최신의 커밋이 된다 

Mixed, Soft와 다르게 어디에도 남지않고 깔끔하게 다 사라진다 

 

2) Mixed - keep working copy but reset index 

 

일단

working copy는 unstaged 영역

index는 staged 영역을 말한다 

 

출처: 생활코딩

 

reset하면 말그대로 되돌리고 싶었던 커밋들이 working copy에 들어가게 되고 index에서는 reset된다 

( chage segmentedcontrol tintColor 커밋을 눌러서 reset한 상태 이다 ) 

 

3) Soft 

 

mixed와는 반대로 되돌리고 싶은 커밋들이 staged 영역(또는 index) 에 들어간다

 

 

6. Revert 

위의 Reset과 같이 되돌리기 (커밋취소) 를 위한 명렁어이지만 두가지 차이점이 있다

 

1) Revert는 "해당 커밋을 되돌렸다" 라는 새로운 커밋을 만들어준다 (즉 되돌린 히스토리가 기록된다)

 

취소하고 싶은 커밋을 오른쪽 클릭하고 Revert this commit을 누르면 이렇게 된다 

 

 

2) Revert는 되돌리고 싶은 커밋들을 하나하나씩 다 Revert 해줘야한다 

 

 

 

위의 두개의 커밋을 취소하고 가장 마지막 커밋을 change background color로 해주고 싶다면 

위의 두 커밋을 각각 눌러서 revert 시켜줘야한다

 

반면 Reset은 다음과 같은 상황이라면, change background color 커밋을 누르고 reverse만 누르면 그 다음 커밋들이 쭉~ 다 취소된다

 

 

7. Hunk 관련(?) 


1) UnStage Hunk 

 

작업 하나를 커밋하려고 할 때, 가끔씩 이렇게 두가지 작업이 한 커밋에 들어와있는 경우가 있다 

 

그럴 때 원하는 작업 빼고 다른 작업들을 unstage hunk 누르면 (여기서는 addBorder함수 추가한 작업)
이렇게 unstage hunk 한 작업들이 해당 커밋에서 분리되고 Unstage files에 새로운 커밋들로 추가된다 

 


[번외]

git에서 버전관리하지 않을 파일은 ignore하기 그러면 gitignore 생성된다 

https://developer88.tistory.com/93?category=228002

 

SourceTree 에서 수정하는 gitignore

SourceTree를 이용하면 형상관리를 쉽게 할 수 있어서 좋은데요. 하지만, 가끔 관리하지 않아도 될 파일들이 추가되는 경우가 있습니다. 특히, Android Studio를 사용하다 보면, Studio와 관련된 파일들이 많이 생..

developer88.tistory.com

[팁]

충돌을 최소화하려면 다음 그림같이 새로운 브랜치에서 작업하기 전에 계속 master브랜치를 merge 해주면서 작업하는 것이 좋다고 한다

어차피 새로운 브랜치 작업이 끝나면 이 브랜치를 master에 merge할 것이니까 몇 개월 후에 merge해서 충돌이 엄청 많이 나는 것 보다 조금씩 동기화시키며 작은 충돌을 해결해나가다가 최종 merge하는 것이 훨씬 good이다  

출처: 생활코딩 

반응형
댓글