티스토리 뷰
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
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
3. Squash
여러개의 커밋을 하나로 합칠 때 사용한다
사용 case :
커밋이 불필요하게 여러 개로 나뉘어져 있다면 squash한다
커밋 그래프를 단순하게 가져가고 의미 있는 커밋들로 관리할 수 있다
배민에서 squash를 쓰는 case :
http://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html
SourceTree에서 squash하는 법 :
https://www.lesstif.com/pages/viewpage.action?pageId=24445167
4. Merge
https://developer88.tistory.com/153
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
[팁]
충돌을 최소화하려면 다음 그림같이 새로운 브랜치에서 작업하기 전에 계속 master브랜치를 merge 해주면서 작업하는 것이 좋다고 한다
어차피 새로운 브랜치 작업이 끝나면 이 브랜치를 master에 merge할 것이니까 몇 개월 후에 merge해서 충돌이 엄청 많이 나는 것 보다 조금씩 동기화시키며 작은 충돌을 해결해나가다가 최종 merge하는 것이 훨씬 good이다
'💻 > Git' 카테고리의 다른 글
[Git] local/remote/merged 브랜치 목록 조회 명령어 (0) | 2021.04.01 |
---|---|
[Git] Gitignore 파일 만들기 (1) | 2020.12.04 |
[Git] remote repository를 특정 커밋으로 초기화시켜주기 (0) | 2019.06.29 |
[Git] Merge vs Rebase 커밋내역 비교 (0) | 2019.05.28 |
[Git] 브랜치 관리 전략 GitFlow (0) | 2019.01.03 |
- Total
- Today
- Yesterday
- drf custom error
- Flutter getter setter
- Dart Factory
- 구글 Geocoding API
- Python Type Hint
- Django Heroku Scheduler
- ipad multitasking
- 플러터 얼럿
- Django FCM
- DRF APIException
- PencilKit
- cocoapod
- 플러터 싱글톤
- SerializerMethodField
- METAL
- Flutter Spacer
- Flutter Clipboard
- Flutter 로딩
- Flutter Text Gradient
- 장고 Custom Management Command
- ribs
- 장고 URL querystring
- flutter dynamic link
- Sketch 누끼
- github actions
- flutter build mode
- Django Firebase Cloud Messaging
- flutter 앱 출시
- Watch App for iOS App vs Watch App
- flutter deep link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |