일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- combine
- Xcode
- MVVM
- 리팩토링
- uitableview
- 리펙토링
- HIG
- Clean Code
- Protocol
- 리펙터링
- clean architecture
- swift documentation
- rxswift
- Observable
- RxCocoa
- UITextView
- 클린 코드
- ribs
- Refactoring
- 애니메이션
- uiscrollview
- tableView
- Human interface guide
- UICollectionView
- collectionview
- ios
- SWIFT
- map
- swiftUI
- 스위프트
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[git] 5. branch, stash 본문
이 두 가지를 위해서 branch사용
1. branch 기초
1) branch 목록
git branch
2) branch 생성
git branch ["branch name"]
3) branch 접근
branch checkout [branch name]
4) branch로 이동해서 작업한 경우, 해당 branch에서만 변경
2. branch 정보 확인
1) branch목록
git branch
2) 모든 브랜치 표시
git log --branches --decorate
3) 브랜치 그래프
git log --branches --graph --decorate
- commit 별 graph를 그려서 branch간의 관계를 파악 할 수 있음
4) oneline
git log --branchs --decorate -- graph --oneline
5) 브랜치 간 비교
git log [브랜치명1]..[브랜치명2]
git diff [브랜치명1]..[브랜치명2]
브랜치명1에는 없고 브랜치명2에 있는 것을 보여줌
6) 브랜치 간 소스까지 확인
git log -p [브랜치명1]..[브랜치명2]
3. branch 병합 및 삭제
- exp branch 정보를 master branch에 넣기
1) exp 브랜치 -> master 브랜치
exp를 master로 가져올 땐, master로 체크아웃
git checkout master
git merge exp
* merge 된 것 확인
git log --branches --decorate --graph --oneline
master는 exp가 작업했던 3번 커밋, 내용을 가지고 있음
2) 삭제
git branch -d [branch name]
4. merge의 개념
1) Fast-forward : 빨리 감기(브랜치 포인터를 최신 커밋으로 옮김)
git checkout master
git merge hotfix
<hotfix 브랜치 삭제, iss53커밋>
git branch -d hotfix
check out iss53
git commit -am "new"
2) 3 way merge commit
위 그림에서 merge다시 시도
$ git checkout master
Switched to branch 'master'
$ git merge iss53
Merge made by the 'recursive' strategy.
index.html | 1 +
1 file changed, 1 insertion(+)
master와 iss53의 merge : 공통의 조상 찾음(C2) -> 3 way merge의 방법을 이용하여 merge
c4, c5 merge -> 두개를 합쳤다는 정보 C6커밋 생성
* fast forward는 커밋을 생성하지 않지만, merge commit할 시 커밋이 생김
5. branch merge시 충돌 해결 방법
git merge exp인 상황에서 exp의 내용 변경시 master에도 갱신 되지만,
master에서 바꾸면 exp에 반영안됨
1) exp에서도 master 병합
git checkout exp
git merge master
2) 병합된 두 브랜치 상에서, 같은 파일을 변경 후 각각 커밋 -> merge하면 어떤일 발생?
파일 열어보면,
<<<<<<< HEAD : 현재 checkout한 브랜치의 변동사항 시작점
====== : 기준선(위는 현재 checkout한 내용, 아래는 merge하려는 checkout의 변동사항)
>>>>>>>> exp : merge하려는 checkout의 변동사항 끝점
이 파일을 수정 한 후 merge를 다시 시도하면 해결
6. stash
- working directory의 파일 내용을 감추는 것(버전 관리가 되고 있는 파일 대상만 작동)
다른 브랜치로 checkout을 해야 하는데 아직 현재 브랜치에서 작업이 끝나지 않은 경우는 커밋을 하기 애매함
-> 작업 중이던 파일을 임시로 저장해두고 현재 브랜치의 상태를 마지막 커밋의 상태로 초기화 기능
master -> f1.txt생성
git branch -b exp -> f1.txt수정
git checkout master -> git status
- git commit을 하지 않았으므로 midified라고 뜸
1) exp 브랜치에 working directory와 index state에 저장
git stash
-> 이제 f1.txt는 exp에서 수정한 내용을 담고 있지 않음
2) 복원
git stash apply
-> f1.txt내용 다시 갱신되어 있음
3) stash 정보 목록
git stash list
4) 최상위 stash{0} 삭제
git stash drop
5) git status 전 상태 지우기
git reset --hard HEAD
* git stash pop 명령어
git stash pop
// git stash apply + git stash drop
'Git, CocoaPods, Xcode, Shell > Git' 카테고리의 다른 글
[git] 7. Tag (0) | 2020.06.10 |
---|---|
[git] 6. branch, reset, merge의 원리 (0) | 2020.06.10 |
[git] 4. git의 원리 (0) | 2020.06.09 |
[git] 3. 되돌리기, 메뉴얼 활용 (0) | 2020.06.09 |
[git] 2. 버전 생성 & 변경사항 파악 (0) | 2020.06.09 |