CLI와 Git 내부의 폴더와 파일을 분석하여 Git 명령어들이 어떻게 동작하는지 살펴본다. Git init 내부 분석 Git Bash에서 임의의 빈 폴더에 git init을 통해. git을 만든다.(로컬저장소 생성) ls -al. git를 통해. git 폴더 내부를 살펴보면 다양한 폴더들이 생성된 것을 확인할 수 있다. ls -al 명령의 각 칼럼의 의미 -rw-r--r-- 1 파일과 권한과 상태를 의미하는 것인데, Git 내부 명령을 이해하는데 중요한 것은 _맨 앞이 ‘-’로 시작하면 파일 ‘d’로 시작하면 폴더_라는 것 junpyohong 파일 소유자의 아이디 staff 파일이 속한 그룹(파일 소유자가 속한 그룹) 73 파일의 크기, 바이트 표시로 표시 Dec 27 13:36 파일 생성 시간 des..
Mac 자격증명(Credential) 관리 계정 정보를 입력 및 삭제하는 방법 SourceTree에서 직접 입력하기 옵션 - 계정에서 사용자 계정 정보를 Remove로 삭제 CLI에서 git Push 명령어 사용 사용자 계정이 없는 상태에서 git push 로그인 정보 입력 후 자격 증면 관리자를 보면 GitHub 정보가 오늘 날짜로 자동으로 추가됨 Mac에서 Git 인증 관리 git config --local credential.helper git config --global credential.helper git config --system credential.helper 기본적으로 맥에서 사용자 인증을 관리해 주는 osxkeychain이 git의 인증 관리에도 사용 키체인 접근이라는 앱이나 소스트리..
CLI를 이용한 빨리 감기 병합 branch1 브랜치가 master 브랜치보다 최신 커밋을 가리키고 있다. 그리고 두 브랜치는 같은 작업의 흐름에 있다. master 브랜치로 checkout 후 master 브랜치와 branch1 브랜치를 merge(병합)하면? 새로운 커밋이 생성되지 않고 master 브랜치가 빨리 감기 된다. HEAD가 branch1이고 main이 이전 커밋인 이런 커밋로그가 있다. main 브랜치로 체크아웃하고 커밋을 해보겠다. 중간에 보면 Fast-forward라는 문구와 함께 branch1이 가리키던 커밋을 함께 가리키는 것을 확인할 수 있다. origin/HEAD는 변하지 않았는데 아직 원격저장소에 Push 해주지 않았기 때문이다. 빨리 감기(fast-forward) 상황에서 ..
브랜치 정의 : 논리적으로는 어떤 커밋과 그 조상들의 묶음 Actually, 단순히 커밋 객체 하나를 가리킴 커밋을 하면 커밋 객체가 생긴다. 커밋 객체 = 부모 커밋에 대한 참조 + 실제 커밋을 구성하는 파일 객체 브랜치 사용 시기 새로운 기능 추가 가장 대표적으로 브랜치를 사용하는 경우 master 브랜치는 보통 안정적인 버전의 프로젝트가 저장되어 있음 → 새로운 기능을 추가할때는 master 브랜치로부터 브랜치를 생성 버그 수정 버그 발생시 master 브랜치로부터 새로운 브랜치 생성 이때 브랜치 이름은 hotFix 또는 bugFix 사용 버그가 다 고쳐지면 master 브랜치에 병합 병합과 리베이스 테스트 병합이나 리베이스는 까다로운 작업 → 임시 브랜치를 만들어 여러 테스트 진행 이전 코드 개선..
GUI 환경 대신 굳이 CLI를 사용하는 이유? GUI 프로그램은 CLI 기능 중 자주 쓰는 기능만 모아서 쓰기 편리하게 만든 것 GUI는 Git의 모든 기능을 100% 사용할 수 없다. → Git을 더욱 잘 활용하기 위해 CLI 환경에서 Git을 사용해야 한다. Git 용어 워킹트리(Working Tree) : 사용자가 파일과 하위 폴더를 만들 과 작업 결과물을 저장하는 곳 작업 디렉터리, 작업 폴더가 같은 뜻으로 사용 커밋을 체크아웃하면 생성되는 파일과 디렉터리(공식문서) 작업 폴더에서 [. git] 폴더(로컬저장소)를 뺀 나머지 부분 작업 폴더 : 워킹트리 + 로컬저장소 로컬 저장소 : [. git] 폴더 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장 원격 저장소 : 로컬 저장소를 ..
Reset(되돌리기) 현재 브랜치의 최신 상태를 이전 커밋(원하는 커밋)으로 되돌리는 기능 3가지 모드 존재 Hard : 모든 작업 내 변경 사항을 버린다.(변경 사항을 다 삭제) Mixed : 원하는 커밋으로 되돌아가지만, 변경사항은 스테이지 아래에 둠 Soft : 원하는 커밋으로 되돌아가지만, 변경사항은 스테이지 위에 둠 Sourcetree Hard Reset 실습 add featB 커밋으로 되돌리기 위해 Reset 버튼을 클릭 3가지 모드 중 Hard 선택 로컬저장소는 적용됐지만 원격저장소 origin에는 아직 적용되지 않음 히스토리를 수정하는 작업이기 때문에 강제푸시를 사용해야 한다. 따라서 ForcePush를 체크한다. 정상적으로 원격저장소인 origin에도 적용된 것을 확인할 수 있다. Rev..
Amend 가장 최근에 올린 커밋을 수정하는 명령어 로컬 저장소까지만 Push 했을 때와 원격저장소까지 Push 했을 때까지 방법이 다름 SourceTree 로컬 저장소까지만 Push 했을 때 README.md에 “8. 어멘드 추가”라는 텍스트를 추가해서 커밋메시지 없이 로컬저장소까지 커밋했다. 이를 다시 새로운 커밋로그를 만들지 않고 “8. 어멘드 추가”를 “8.add amend”로 바꾸고 커밋 메시지에 “어멘드 추가”를 넣고 싶다. 이때 amend를 사용할 수 있다. 방법은 간단하다. 일반적인 커밋과 마찬가지로 README.md에서 텍스트를 수정해 준 뒤 커밋메시지를 추가해 준다. 이후 커밋 이전에 Commit Options에 Amend last Commit을 눌러준다. 그럼 확인 문구가 뜨고, 확인..
Pull Request를 보냈을 때 충돌이 난다면? Solution1. 내 브랜치에 병합 커밋을 만들어서 해결 브랜치 B에서 커밋 1과 커밋 2를 병합해서 병합충돌 문제를 해결한 커밋 3을 만듦 커밋 3은 충돌문제를 해결했기 때문에 정상적으로 브랜치 A에 Pull Request 가능 But, 해당 방식은 Pull Request 때문에 쓸데없는 커밋 로그가 남게 됨 → Rebase 방식을 사용하면 이런 문제 해결 가능 Solution2. Rebase Rebase : 커밋의 베이스를 떼서 다른 곳으로 붙이는 것 깔끔한 Pull Request를 보낼 수 있음 내 브랜치에 내 변경사항만 남길 수 있다는 장점이 있음 실수하면 파일 전체가 꼬이는 문제가 발생할 수 있으므로 조심해서 사용해야 함 브랜치 B에 있는 커..