본문 바로가기

Git,Github

(8)
Git 초보자들의 구원자 Reflog 알아보기 죽은 커밋도 예토전생이 가능하다 본인은 습관처럼 개발 관련 영어가 나오면 원뜻을 찾아보는 습관이 있다. re + flog 인줄 알았으나 ref + log 였다 (...) 뭐 여튼 깃에서 커밋이던, 체크아웃이던 무슨 행동을 할때마다 깃은 그 정보를 기록한다. 예를들어 정말 간단한 txt 파일을 만들어서 master 에는 월요일과 화요일을 만들고, weekend 브랜치에는 토요일, 일요일을 적은 간단한 파일을 만들었다. 이때 .git의 logs 폴더에 들어가면 HEAD란 파일이 있다. 이 파일을 메모장으로 열어보면 이런 내용이 있다. 이와같이 우리가 깃에서 하는 행동들을 기록해놓는 것이다. 이걸 바탕으로 우리는 사라진 커밋이나 심지어 Rebase를 취소할수도 있다. 보통은 막무가내로 Rebase를 시도했다가..
Git Rebase 알아보기 깃 지옥 해결법 물론 현업이 아닌 4~5명정도의 소규모 프로젝트에서는 사실 깃 지옥이랄것도 없지만... 만약에 그 이상, 그리고 다양한 개발자가 함게 참여한 깃 히스토리를 본 적이 있는가? Javascript 개발자들의 영원한 적 Git 판 콜백지옥이라고 봐도 무방하다(...) Merge는 이른바 머지 커밋이 생성되는데, 이게 모두 깃 히스토리에 올라가니 굳이 머지했다는 커밋은 필요없지 않나? 에서 나온게 바로 리베이스이다. Re + Base 즉 베이스를 다시 설정했다는 뜻이다. 위의 'B'커밋이 D와 E커밋의 Base인데, 이 베이스를 다시 C로 설정하여 본래 브랜치 위에 D* E* 브랜치를 얹어버린것이라고 생각하면 쉽다 이때 D*와 E*의 해시값 역시 변경된다. (다시 베이스를 재설정한 것이므로) 이..
Origin/master(원격추적 브랜치) 알아보기 제일 중요한 점 : Git과 Github에서 관리되는 Repository는 다르다는 것 본인이 프로젝트 중간에 투입이 된다면, Git clone을 사용하게 된다. 말 그대로 프로젝트 코드들과 Git 관련 정보들을 복제해서 내 로컬 컴퓨터에 가져오는 것인데, 여기서 조금 당황할만한 상황이 있다. 관련 자료는 유데미 Colt 선생님 예제에서 가져왔다. 해당 깃허브 관련 내용이다. 브랜치가 총 6개 있다고 나온다. 그래서 룰루랄라 클론을 하고 git branch를 확인하는 순간 어? 난 분명히 Git clone으로 전부 가져왔는데 왜 브랜치는 같이 안왔지?? 라고 착각하기 쉽다. 그런데 잘 생각해보면 git branch 명령어는 내 local환경에 있는 브랜치를 보여달라는 명령어이다 git clone을 해오면..
Main 과 Master 브랜치의 차이(사실 별거없음) 처음 '협업' 이란걸 깃헙으로 해보면 거의 100% 당황하게 된다(본인도 경험) 지금까지 깃에서 'Master' 를 메인 브랜치로 놓고 여러가지 작업을 하다가 팀과 같이 협업한다고 '콜라보레이터' 등으로 등록해서 열심히 커밋해야지 하고 다짐한 순간... 갑자기 'Main'브랜치라는게 등장할때가 있다 근데 이름에서 느껴지듯 굉장히 중요해 보인다 . 그럼 이 정체는 뭘까? 별거 아니다. Git에선 Master란 브랜치를 default로 쓰고, Github에선 Master대신 Main으로 default를 쓰기 때문에 발생한 촌극이다. 그럼 왜 Github 에선 Main으로 바꾸었느냐. Master라는 단어가 주는 주종관계(????) 뉘앙스 때문이란다. 실제 기사 : https://zdnet.co.kr/view..
Git - Detached HEAD 당황하지 말자 본인은 이 상황에 처하자, 알집 압축본을 Slack으로 팀원들과 공유하고 Git 사용을 포기해본 적이 있다(...) 뭣때문에 그런지는 모르겠는데, 아마 SourceTree 관련해서 뭐 이것저것 만져보다가 뭘 잘못 눌러서 그랬던것 같다. (내 개인적인 생각인데, CLI로 깃을 먼저 철저하게 배워놔야 한다고 생각한다) 우선 HEAD 부터 알아야 하겠다. 각 브랜치에 있는 가장 최신의 커밋을 가치키는게 HEAD이다. 간단히 4개의 커밋이 있다고 해보자, 본인은 Master 브랜치만 있는 상태이고, 당연히 HEAD는 master의 가장 최근 커밋인 15a200c를 가치키고 있다. 근데 여기서 내가 second 커밋으로 돌아가기 위해서, git checkout efe765d 커맨드를 입력했다고 보자. 보통 깃에 ..
Git 에서 branch와 head를 저장하는 방법 사실 몰라도 되는데 개인적으로 좀 궁금해서 이번 포스팅을 남깁니다. 그냥 문득 이런생각이 들었다 'Git switch로 Head를 바꿀때마다 이 정보는 어떻게 관리되나?' (.git 은 평소에는 숨김파일 처리되어있다) 아래에 보면 HEAD 란 파일이 있다. 이걸 메모장으로 열어보자. ref는 당연히 reference의 약자일 것이고... 현재는 master브랜치에 head가 있다. 그럼 d.branch라는 브랜치로 이동을 해보면 해당 내용은 이렇게 바뀐다 이 HEAD란 파일에서 git 의 현재 head 위치를 알려주는 것이다. 그렇다면 .git 에 있는 refs 란 폴더도 이와 관련이 있을것 같은데.... 들어가보면 우리가 만든 branch들이 들어있고, 그 안에는 각자의 해쉬값이 들어있다. 사실 이거 ..
Git에서 제일 중요한 한가지 - Git의 작동 원리 내가 웹개발 강사면 첫 주에 무조건 Git부터 가르친다 농담이 아니라 진짜다 Git이 어려운 이유는, 이런걸 사용해본적이 거의 없기 때문이다. 갖은 고생을 다 해서 Remote에 연결해놓고도, commit이나 push를 할줄 몰라서 우왕좌왕하는 팀원들을 정말 많이 봤다 (사실 나도 그랬다) 근데...Git 공식 홈페이지 가면 https://git-scm.com/ 무시무시한 양의 커맨드가 나오는데.... 현업에 계신 분들도 자주 쓰는거 말고는 그냥 찾아보거나 안쓴다고(...) 나도 써본 커맨드가 10개? 정도밖에 안되는것 같다. 그런데 이 커맨드보다 더 중요한게 Git의 기본 원리이다 이것만 잘 이해해도 Git 의 핵심을 알게 되는것이니, 각종 오류메시지에 대응할수 있다. 그냥 강사나 인터넷에서 알려준대로..
Atomic commits / Commit 메시지는 현재? or 과거? 개념부터 슥 읽어보자 Atomic Commits 작업들을 그룹화하여 단일 작업으로 커밋한다. Atomic : 더 이상 줄일 수 없는 기본 단위로 큰 시스템을 구성하는 단일 요소 커밋은 단일 기능이나 단일 변화, 수정을 포함해야 한다(=각각의 커밋은 한 가지에 집중해야 한다) 각 커밋을 한 가지에 집중할 수 있도록 최대한 원자성을 유지하는 것이 중요하다 파일 하나가 아닌 작업하고 있는 하나의 기능, 하나의 작업을 의미한다. 여러 작업을 수정했을 경우 git add . 명령을 사용하면 단일 작업이 아닌 변경된 모든 사항이 스테이지에 올라간다. 단일 목적을 유지해야 하는 이유 한 커밋에 모든 변경사항들을 통합했을 경우 커밋을 롤백하면 엄청나게 많은 작업들을 취소해야 할 수도 있다. 하지만 커밋을 원자적으로 단..