목록Git (19)
처음부터 차근차근
reset의 종류 reset의 종류는 아래와 같다. soft mixed hard merge keep [no-]recurse-submodules git reset --help를 치면 볼 수 있다. 여기서 중요하고 자주 사용하는 세가지 종류에 대해서 살펴볼 것이다. soft mixed hard soft, mixed, hard reset git reset --soft : repository(원격 저장소)에 있는 내용만 reset된다. git reset --mixed : repository와 index(git add한 내용)에 있는 내용만 reset된다. git reset --hard : repository와 index, working directory(git add하지 않은 내용들) 모두 reset된다. 모드..
reset이란 reset을 한다는 것은 branch의 최신 commit을 바꾸는 것이다. 아래에 예시를 보자. 현재 git log이다. 두번 째 commit의 주소를 복사하여 두번 째 commit으로 hard reset을 해보았다. 이 상태에서 gistory를 보면 HEAD는 master branch를 가리키고 master branch는 최신 commit으로 두 번째 commit을 가지는 것을 알 수있다. 즉, reset을 한다는 것은 branch의 최신 commit을 바꾸는 행동이다. reset을 하면 reset된 commit은 사라질까? 답은 '아니다'이다. 위의 예시를 이어서 보자. 위 예시의 세번 째 commit은 사라지지 않았다. reset된 commit을 가지고 있는 파일은 총 두 개가 있다...
Branch 충돌 branch 충돌이란, branch를 다른 branch로 merge할 때 auto merge에 실패하는 것을 말한다. 두 개의 branch가 같은 파일의 같은 곳을 수정할 때 생긴다. branch 충돌이 안 일어나는 상황 서로 다른 파일을 수정해서 merge 서로 같은 파일의 다른 부분을 수정해서 merge 2번 예) 먼저 master branch에서 third.txt라는 파일을 수정한다. third.txt 파일을 add and commit을 한다. 그 다음 ksy branch로 가서 third.txt를 수정을 한다. third.txt 파일을 add and commit을 한다. 그다음 master로 가서 merge를 하고 third.txt파일에 들어가 본다. 보다시피 error없이 깔끔..
Branch 원리 1. HEAD파일은 현재 checkout한 branch 파일을 가리킨다(HEAD는 파일이다). git init(깃 초기화)을 하면 HEAD라는 파일이 만들어지고, HEAD는 현재 checkout된 branch인 master 파일을 가리킨다. 그리고 commit을 하면 master 파일은 commit을 가리킨다. ksy branch로 checkout하면 HEAD파일 안에는 refs/heads/ksy가 있다. 2. branch는 단지 ref아래에 있는 파일이다. master 파일은 refs/heads 아래에 있다. (refs/heads/master) branch(브랜치 명 : ksy)를 새로 만들면 이 2개 파일이 새로 생기고, refs/heads 아래에 branch파일이 새로 만들어진다...
1. commit을 하면 object안에 commit 내용이 들어간다.(마치 파일 처럼) 그러므로 commit도 내부적으로는 객체(object)다. 1. 누가 커밋을 했는지 2. 커밋 메세지 3. tree 4. parent 2. tree에는 commit 한 당시의 작업 디렉토리의 전체 파일이 나와있다. tree는 commit이 만들어진 시점의 *스냅샷을 가지고 있다고 표현하기도 한다. *스냅샷 : 사진을 찍다. 즉, 과거 한 때의 작업 디렉토리 상태(tree의 내용!) 3. parent 에는 바로 전 commit이 담겨있다. 4. commit의 tree 내용은 commit마다 다르다. 5. 디렉토리는 tree로 commit된다. testDir 디렉토리가 tree로 commit된 것을 알 수 있다. + o..
1. gistory를 실행한 디렉토리에서 내용을 변경하고 git add를 하면 .git의 object파일과 index 파일이 변경된다. index 파일에는 파일의 이름이 들어있고, objects 파일에는 파일의 내용이 들어있다. 이미지에서 볼 수 있듯이 index안의 파일 이름은 objects 파일의 역슬래쉬 뺀 이름이다. 2. git은 파일의 이름이 달라도 파일의 내용이 같으면 같은 오브젝트 파일을 가리킨다. 이러한 git의 내부 메커니즘으로 인해 다른 사람이 file내용을 aaa라고 했을 때와 내가 aaa라고 했을 때 두 가지 경우 모두 같은 파일을 가리킨다. 예 first.txt 파일을 복사해서 third.txt 파일을 만들고(cp first.txt third.txt) git add third.tx..
gistory gistory는 git의 원리를 공부하고 분석할 때 사용하는 도구이다. 파이썬을 깔면있는 프로그램으로, git 파일의 어떤 부분이 새로 만들어지고 동작되었는지 알 수 있다. 1. 먼저 파이썬을 설치한다. 2. 다 설치되었으면 python 환경변수 설정을 한다. (1) 제어판 > 시스템 보안 > 시스템 > 고급 시스템 설정을 클릭 (2) 환경변수 클릭 (3) Path 클릭 하고 편집 클릭 (4) 새로만들기 클릭 후 아래내용 추가하고 확인! C:\Users\사용자계정\AppData\Local\Programs\Python\Python39\Scripts\ C:\Users\사용자계정\AppData\Local\Programs\Python\Python39\ 3. cmd창을 키고 아래 명령을 친다(Win..
branch를 merge하는 방법 branch를 merge하는 데는 두가지 방법이 있다. - Fast-Forward - (Fast-Forward가 아닌 것) recursive strategy 방식 Fast-Forward Fast-Forward란 master branch에서 다른 branch로 분기했을 때, master에서는 변화가 없는데(commit을 하지 않음), 다른 branch에서 변화가 생기고(commit함) 다시 master branch로 merge하려 했을 때 사용하는 merge 방법이다. merge했다는 commit을 하지 않고, merge하려했던 branch가 가리키는 곳을 master branch가 가리키고 merge를 끝낸다. Fast-Forward를 직역하면 '빨리감기'이다. 직역한 ..