프로젝트 진행을 하면서 브랜치를 나누어 작업하게되었는데, 브랜치를 나누고 병합하는 방식의 프로젝트 진행은 처음이라 다음을 위해서 배운 내용을 적어두기로 했다. (솔직히 커밋할 때마다 심장이 쫄깃하다)
git commit -a -m "commit message"
(추가)
오늘 개발 하는 중에 git commit -am "메시지" 커맨드로 커밋을 했는데 수정한 파일이 전부 올라가지 않았다 ㅜㅜ
push 하기 전에 untrack 메시지도 못봤다!!😭 반성할게요...
모르고 풀 리퀘스트를 했으면 큰 일이 날뻔 했지만...!
다행히 github을 확인해 원하는 파일이 전부 올라가지 않은 것을 바로 발견했다. (다음에도 자주 확인하는 습관을 들여야겠다.)
그래서 push가 안된 것인가? 했지만 everything up-to-date 라고되어있어
git status로 확인해보니, untrack 된 파일이 빨갛게 보였다.
그래서 다시 add 후 Chore로 커밋하니 정상적으로 파일이 업로드 되었다.
알아보니, -a 옵션은 add . 와 같은 기능을 하는것이 아니었다.
-a 옵션은 이전에 add 되지 않은 파일은 빼놓고 add 된다.
다음부턴 잘 쓰지 않을듯...? 싶은 명령어가 되어버렸다.
로컬 브랜치와 원격 브랜치는 다르다.
말 그대로 로컬 브랜치는 로컬에 있는 브랜치이고, 원격 브랜치는 원격에 있는 브랜치 이다.
같은 이름이라도 로컬 브랜치와 원격 브랜치는 차이를 가진다.
git clone을 했는데 원격 브랜치가 보이지 않는다!
git branch
*main
-a 옵션을 붙여 원격 브랜치까지 확인 할 수 있다.
git branch -a
*main
remotes/origin/branchA
remotes/origin/branchB
remotes/origin/branchC
브랜치 이름을 알고 있다면 원격 브랜치로 바로 checkout 할 수 있긴 하다.
git checkout branchA
그런데 수정 사항이 있으면 다음 에러가 난다.
error: Your local changes to the following files would be overwritten by checkout:
불필요한 커밋을 추가 하고싶지 않다면 stash를 사용해야 한다.
git stash
stach는 변경사항을 잠시 다른 곳으로 저장해 숨겨두는 것인데,
stash를 사용하면 변경사항이 없는 코드로 돌아오게 된다.
stash를 통해서 변경사항이 없는 상태로 돌아왔다면 checkout을 할 수 있게 된다.
git checkout branchA
Switched to a new branch 'branchA' --로컬 브랜치 branchA 생성-- Branch 'branchA' set up to track remote branch 'branchA' from 'origin'
로컬 브랜치가 생성되고 로컬 브랜치는 origin 리모트의 브랜치를 가리키게 된다.
원래 checkout 을 통해 브랜치 생성을 하려면 git checkout -b <branch>를 사용한다.
이는 git branch <branch>와 git checkout <branch>와 같다.
git branch -a
*branchA
main
현재 브랜치를 checkout으로 선택했다면, git merge <branch>
현재 브랜치의 내용과 다른 브랜치의 내용을 병합한다.
그런데, 현재 브랜치를 <branch>로 보내는 것이 아닌 현재 브랜치에 <branch>를 가져오는 것이다.
그래서 git merge branchB 를 실행했다면, 현재 브랜치인 branchA에는 branchB의 내용이 들어오지만, branchB에는 아무 변화가 없다.
merge에 대해서는 추가로 공식 문서를 보고 공부해보도록 하자.
checkout을 하기 위해서 변경사항을 저장했던 것을 다시 불러오고 싶다면
stash로 변경사항을 저장했던 브랜치로 checkout해 돌아와
stash pop
을 하면 저장했던 변경 코드가 다시 돌아오게 된다.
프로젝트 진행하면서 두 가지 브랜치의 작업을 맡았을 때, 로컬에서 브랜치를 왔다갔다 하면서 작업하는 일이 생겼는데, 아직 커밋을 할 때가 되지 않았는데 checkout 할 때마다 변경사항을 저장하라는 에러가 많이 나타나는데, 이때 유용하게 쓸 수 있다.
stash 해둔 항목들을 번호와 마지막 커밋메시지와 함께 확인할 수 있다.
stash 해둔 변경사항을 현재 로컬 브랜치로 가져온다.
stash 해둔 변경사항을 현재 로컬 브랜치로 가져온 후, stash drop 한다.
pop 이라는 명령어를 보면 알겠지만, stash는 stack처럼 쌓이고 빠지는 선입선출 구조? 이다. 각 명령어에 번호를 지정하지 않으면 맨 위에 쌓인 최근 항목이 선택된다.
stash 항목을 지운다. list에서 사라지게 된다.
<브랜치 이름>stash해둔 변경사항을 저장한 상태를 새로운 로컬 브랜치로 생성한다.
이 때도 pop 이 실행되어 stash 리스트에서 사라진다.
stash 항목을 모두 지운다.
처음 git을 시작했을 때는 문서를 읽어볼 엄두도 못내고 일단 하고싶은 작업을 구글에 검색하고 블로그에 올라와 있는 글들을 보고 커맨드 하나하나 외워갔는데 프로젝트를 진행하다보니 문서에 나와있는 예시가 와닿아서 더 이해가 잘 되는 느낌이다. 그래도 이렇게 차근차근 늘어가면 될것 같다!💖🔥