https://backlog.com/git-tutorial/kr/intro/intro1_1.html
참고하여 작성하였습니다.

파일을 편집 전 상태로 되돌리고 싶을 때 간단한 방법은 파일을 미리 복사해두는 것임 but 파일을 편집할 때마다 매번 복사하는 일은 실수할 가능성이 높음

파일을 작성하다보면 어느 파일이 최신인지 어떤 부분이 변경된 부분이 변경된 것인지 파악하기 어려움

더욱이 여러 사람들이 동시에 파일을 편집한 경우에는 변경된 내용이 무엇인지 파악하기 어렵고 작업한 내용을 지우는 상황이 발생하기도 함

git은 위와 같은 상황을 대비하기 위해 만들어진 버전 관리 시스템임

git은 소스코드를 효과적으로 관리하기 위해 '분산형 버전 관리 시스템' (리눅스 소스코드를 관리할 목적으로 개발됨)

소스코드가 변경된 이력을 확인할 수 있으며 어떤 시점에 저장된 버전과 비교하거나 특정 시점으로 되돌아 갈 수 있음

또한 공동 작업한 사람과 편집 내용이 충돌한다면 conflict가 발생하여 편집 된 내용이 지워지는 것을 막을 수 있음

*git repository

  • 원격 저장소 (remote repository)
    여러 사람들이 공유하기 위한 저장소

  • 로컬 저장소
    개인 전용 저장소

*commit
파일 변경 사항을 repository에 기록하기 위한 과정
커밋은 시간순으로 저장
커밋할 때 커밋 메시지를 남기는 것은 다른 사람이 커밋을 확인하고 변경 내용을 바로 알아볼 수 있음

*add
파일을 인덱스에 등록하는 명령어 뒤에 파일을 붙여 인덱스에 등록할 파일을 지정할 수 있음
파라미터에 . 을 사용하면 모든 파일을 인덱스에 등록할 수 있음

*git log
저장소의 변경 이력을 확인할 수 있음

*git push
로컬 저장소에서 변경된 이력을 원격 저장소에 공유할 수 있음 푸시를 실행하면 원격 저장소에 변경 이력이 업로드 되어, 원격 저장소와 로컬 저장소가 동일한 상태가 됨

*git pull
원격 저장소에서 로컬 저장소로 파일을 가져오는 명령

*git merge
pull 한 저장소가 최신 버전이 아닌 경우
pull을 실행한 후 타인이 push하여 원격 저장소를 업데이트 한 경우에는 push 요청이 거부되어 버림
이와 같은 경우 merge 작업을 진행하여 타인의 업데이트 이력도 내 저장소에 갱신해야 함

*git branch
브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념
이렇게 만들어진 브랜치는 타 브랜치와 merge 함으로써 작업한 내용을 다시 모을 수 있음

*master branch
repository를 처음 만들면 git은 'master'라는 브랜치를 만듦

*feature branch
기능 추가나 버그 수정 같은 작업을 위한 브랜치

*git merge// git rebase
통합되는 브랜치에 feature branch를 합치고자 하는 목적은 같음

  • merge
    변경 내용의 이력이 모두 남아 있어 이력이 복잡해짐

  • rebase
    이력은 단순해지나 커밋 이력이 변경됨
    정확한 이력을 남겨야 할 때는 merge