본문 바로가기

Git/Git 기초

[Git] Git의 기초 기능

반응형

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가 날수있음

 

반응형