Git branch
- branch란 독립적으로 어떤 작업을 진행하기 위한 개념.
- 필요에 의해 여러 branch를 만들 수 있다
- 각각의 branch는 다른 branch의 영향을 받지 않는다
- 이러한 특성 덕분에 여러 작업을 동시에 진행할 수 있다
Git merge
- branch를 병합할 때 가장 많이 쓰는 기능.
- 분기된 commit을 하나의 commit으로 합치는 기능.
- 여러 branch를 merge함으로써 작업한 내용을 다시 새로운 하나의 branch에 모을 수 있다.
- merge는 두가지 종류로 나뉜다
- fast-forward
- 동일 내용이 포함되는 브랜치일 경우 브랜치 이동만으로 병합
- 서로 다른 상태를 병합하는 것이 아닌 변화가 없는 브랜치에 commit이 변화가 있는 commit 위치로 이동 만하여 합쳐지는 경우(별도의 commit이 생기지 않음)
- merge commit
- 서로 다른 상태의 branch를 병합했을때 생기는 경우.
- 새로운 commit을 생성해서 merge함
Git rebase
- 베이스를 재배치하는 것
- merge를 사용하다 보면 히스토리를 볼 때 여러개로 나눠져 있어서 보기가 어려운데 그럴 때 rebase로 베이스를
다시 정의해 커밋라인을 정리한다
- rebase를 하게 되면 커밋도 새로 사용되고 정렬도 새로하기 때문에 기존 커밋트리와는 완전히 달라진다.
Pull Request
- 당장 merge하지 않는다는 규칙을 가지고 Pull Request를 본다. 코드에 신경쓰게 되고 어떤 작업이 언제 적용되었는지 알 수 있다.
Reset
- 말 그대로 리셋. 어떠한 커밋지점으로 돌아감. 그 이후의 이력은 모두사라짐
- hard: 돌아간 커밋지점 이후의 이력은 모두 사라짐
- soft: 돌아간 커밋지점 이후의 내용이 지워지지 않고 남아있으며 인덱스도 남아있음(돌아갔지만 다시 원래 커밋상태로 돌아갈수 있다)
- mixed: 돌아간 커밋지점 이후의 내용에 대해서는 남아있지만, 인덱스가 초기화 됨. 그렇기에 다시 원래있던 커밋으로 돌아가려면 변경된 내용은 다시 추가해야하는 상태.(기록만 남아있는상태)
- reset HEAD~n: 현재부터 n개 이전 이력으로 돌아갈 수 있음
Revert
- 리셋과는 다르게 특정한 커밋 지점만 삭제 시킴
- 특정지점만 삭제. 이미 commit을 해서 최근 커밋이 아닌 중간에 있던 커밋을 삭제할때 사용. 하지만 이때 conflict가 날 수있음.
- 특정지점부터 특정지점까지 광역 삭제 가능
둘의 차이
- Reset은 깔끔하게 오류없이 전으로 돌릴수 있으나 push 이후에 변경할 수가 없다는 것이 단점이라고 생각한다. 언제나 push전에는 정말 괜찮은 커밋인지 확인하고 Revert보단 reset을 하는게 좋아보인다.
- 이미 push 한 상태에서는 revert 밖에 할수 없음 -> 이때 conflict가 날수있음