Git 이해와 명령어를 공부하며 기초적인 필수 명령어를 정리해본 적이 있었다. 그 외에 반드시 알아야 하는 명령어들을 추가로 공부해보겠다.
https://velog.io/@lany159/Git-이해와-명령어
- git init
- git add
- git commit
- git log
- git push
- git clone
- git pull
나무가지의 비유적 표현으로 새로운 기능을 추가할 때, 원본파일이 아닌 복사본 파일을 만들어 그곳에서 기능을 추가할 때 사용한다. 복사본에서 코드가 정상적인 기능을 하면 원본 파일에 반영하는 것이 안정적이기 때문이다.
파일을 순차적으로 수정을 하다가 경우에 따라 다양한 상황에서 사용될 수 있다.
고객용으로 파일의 내용을 일부 수정해서 제공이 필요할 때, 파일을 복사하여 고객용에 맞춰 수정을 한다. 또한, 본인이 가질 파일의 내용 수정도 필요할 때에는 원본파일에서 계속해 수정의 과정을 거칠 것이다.
더 이상 고객용으로 제공 될 내용의 수정이 없다면 멈출 것이고, 원본 파일의 내용도 수정 및 완료할 것이다.
하지만, 상황에 따라서 고객용 문서의 내용이 원본 파일에 반영이 되어야할 경우도 발생한다. 그럴 때에는 두 개의 내용을 합쳐서 새로운 파일을 만들 수 있다.
물론, 새로운 파일로 만들어 작성할 수 있다. 그렇게 될 경우, 파일의 이름이 더럽혀지고 분기되었던 작업을 합칠 때에 상당히 까다롭기 때문에 branch를 사용한다.
작업을 진행하다가 필요에 의해서 작업이 분기되는 현상을 "branch를 만든다"라고 한다.
복제 된 branch는 새로운 branch가 되고, 기존의 작업은 main branch가 된다. 여기서 우리는 branch를 2개 가지게 되는 것이다. 그 말은 branch를 하건, 하지 않았건 기본적으로 하나의 branch를 이미 가지고 있다는 말로 해석할 수 있다.
git branch는 프로젝트 복사본. 즉, commit 복사본을 만드는 명령어다.
git switch, git checkout 차이점?
: git checkout은 이동 외 여러기능이 더 있기 때문에 이동하기만 한다는 의미가 불명확하고, 혼란이 올 수 있기 때문에 이동의 기능만 하는 git switch가 최근에 생김
git switch가 되지 않는다면 ? 해당 브랜치에서 commit을 다 하지 않았을 수도 있기 때문에 add - commit 해보기
git status > 'On branch "브렌치명"' > "브렌치명" 사본에 위치한다. 또는, git branch로도 확인 가능하다.
파일 추가 및 코드 작성 > git add . > git commit -m "커밋 메시지"
다시, git swich main 하면 파일트리에 만들어 놓은 coupon branch가 사라진다.
coupon이라는 파일은 coupon branch에서 만들었고, main branch에서는 만들지 않았기 때문이다. 이는, 독립적으로 개발이 가능하다는 말과 같다.
브렌치 생성과 이동이 한 번에!
: git switch -c "브렌치명" (c: create)
: git checkout -b "브렌치명" (b: branch)
main branch가 최종 branch로써의 역할을 해줘야하기 때문에, coupon branch에서 작성한 코드를 main branch에 합친다.
merge를 할 때에는 기준이 되는 최종 branch로 이동 후 사용한다.
merge를 하게 되면 2가지 경우가 발생한다.
merge가 제대로 이루어졌을 때에는 merge를 한 이유를 적는 문구가 나타나는데 ':wq'로 빠져나와도 무방하다. 그리고 충돌이 발생한 경우에 대해서는 먼저 충돌이 일어나는 이유에 대해서 알아보자.
다른 파일을 작성 시, 다른 사람이 이미 git push 하고 본인도 git push 하려고 하면 에러가 발생한다.
git pull 시, 아래와 같은 경고문이 뜬다면, hint 명령어 입력 후 git pull origin '브렌치명' 입력한다.
git config pull.rebase false만 써도 된다.
같은 파일에서 코드 작성 시, 충돌이 발생한다.
코드 작성 위치는 엔터도 하나의 위치로 인식되기 때문에 충돌이 발생할 수 있다.
충돌을 해결하는 방법은 어느 코드로 할 것인지 정하고 수정하면 된다.
commit, push는 자주하는 것이 좋다!
프로젝트 진행에 문제가 발생하였을 때, 문제 발생 전으로 되돌리고 싶을 경우가 발생한다.
여러번의 commit 과정을 거쳐 3번째 '93c'로 시작되는 부분으로 돌아가고 싶을 때가 있을 것이다. 그때, reset을 사용한다.
현재 branch의 최신 commit은 '93c'으로 시작하는 commit이 된다. 그리고 이전에 있었던 commit은 삭제된다.
이는, 최신 commit을 바꾸는 행위라고 할 수 있다. 그렇다고 4번째 'f3e'로 시작되는 commit은 영구 삭제되지 않고 우리의 눈에 보이지 않게 될 뿐이다. Git은 웬만해선 어떠한 정보도 지우지 않는다.
즉, HEAD의 포인터를 커밋 해쉬 위치로 변경하고 커밋 해쉬 이후 commit들을 삭제하는 개념이다.
HEAD : 현재 branch를 가리키는 포인터이며, branch는 branch에 담긴 commit 중 가장 마지막 commit을 가리킨다.
checkout은 특정한 branch에 속해있는 것이 아니라 특정 commit을 가르킨다. HEAD가 가리키는 branch를 바꾸면, HEAD는 계속 현재 branch에 있고 현재 branch가 가리키는 commit을 바꾼다.
HEAD 참조 포인터를 지정된 커밋으로 이동하는데, master(main)로 checkout을 하게 되면 master branch에 속해있는 버전으로 바뀐다고 할 수 있다. 또한, branch 뿐 아니라 지정된 commit으로 이동도 가능하다.
git branch로 현재 HEAD는 3번째 commit 아이디 '93c'로 바뀌어 아래의 기록되고, 결과는 같다.
checkout은 HEAD를 제어하는 느낌이라면, HEAD가 branch를 가르키고 있는 동안에 reset은 branch를 제어한다고 볼 수 있다.
checkout
: HEAD를 바꾸는 것.
reset
: branch가 가르키는 commit을 바꾸게 되면 그 commit 이후에 나오는 것은 branch 소속이 아니기 때문에 삭제한 느낌을 받음.
HEAD를 중간에 넣으면 detached HEAD state가 되어 최신 commit 기록과 연결되지 않아 에러가 발생하므로 조심하자.
이전 commit 기록을 새로 commit하여 최신 상태로 지정한다.
복원의 개념과 비슷하다.
최종 수정일 24.03.08