목록Git (15)
나의 지식 보관소
리모트 레퍼런스는 브랜치 태그 등을 포함한 리모트 리포지토리의 레퍼런스(포인터)이다. $ git ls-remote 명령을 사용해서 리모트 레퍼런스의 목록을 얻을 수 있다. $ git remote show 명령은 리모트 브랜치들의 정보를 얻을 수 있다. 하지만 보통은 remote-tracking branch를 사용한다. Remote-tracking branch Remote-tracking branch는 리모트 브랜치들의 상태를 참조하는 브랜치이다. Remote-tracking branch는 움직일 수 없고 Git이 자동으로 움직여준다. 리모트 저장소에 마지막으로 연결했을 때 브랜치가 어떤 커밋을 가리키고 있었는지 나타내는 북마크라고 생각하면 된다. Remote-tracking branch는 / 의 이름 형..
Git에서 barnch 관련 명령은 생성과 삭제외에도 더 많은 일을 한다. 인자 없이 $ git branch 명령을 실행하면 간단한 브랜치 목록을 보여준다. 그중 * 문자로 수식되어있는 브랜치는 현재 체크아웃되어있는 브랜치임을 나타낸다. $ git branch -v 를 사용하면 각 브랜치의 마지막 커밋을 볼 수 있다. 다른 유용한 옵션으로는 --merged와 --no-merged 가 있는데 이 옵션들은 현재 사용중인 브랜치를 기준으로 머지를 했는지 안했는지 필터링해준다. 이미 머지된 브랜치를 보고 싶으면 $ git barnch --merged를 사용하면 된다. 이 명령 실행이후 *이 붙어있지 않은 브랜치는 이미 다른 브랜치와 merge 했기 때문에 $ git branch -d 로 삭제해도 되는 브랜치다...
Git 충돌 발생 3-way merge가 실패하는 경우 즉, 병합하는 두 브랜치에서 같은 파일의 같은 부분이 동시에 수정이 일어났을 때 병합을 시도하면 Git은 해당 부분을 병합하지 못하고 충돌을 발생시킨다. 이러한 충돌이 발생하면 개발자가 대신 해결할 때까지 병합할 수 없다. 자 그럼 이제 연습을 위해 일부러 충돌을 일으켜보자. 여기서 사용되는 브랜치와 파일 내용은 아래와 같고, branchA와 branchB를 병합할 것 이다. 브랜치 텍스트 파일 내용 master aaa bbb ccc branchA aaa 111 ccc branchB aaa 222 ccc branchA와 branchB모두 master브랜치를 기반으로 두고 있고, 두 브랜치 모두 두 번째줄을 수정했으니, 두번째 줄에서 충돌이 일어날 것..
예시 기반 커밋 커밋1 커밋2 머지 커밋 A A B B B B C Ca Cb 충돌 발생 D D 위 표는 커밋1과 커밋2를 병합하려고 하는데, 두 커밋의 공통된 기반 커밋을 참고하여 어떤 것을 머지 커밋에 채택할지 결정하고 있다. 이런 방식을 3-way merge라고 부른다. 위 표를 보면 기반 커밋이 A파일을 가지고 있고, 커밋1 또한 A파일을 가지고 있는데 커밋2는 A파일을 가지고 있지 않다. 이 말은 즉슨 커밋1에서는 A파일에 대한 수정이 일어나지 않았지만 커밋2에서는 A파일을 삭제했다는 뜻이 되므로 두 커밋을 병합할 때 우선시해야 할 수정사항은 A파일의 삭제가 된다. 두 번째로 기반 커밋과 커밋1, 커밋2 모두 B파일을 가지고 있고 이는 아무런 변화도 일어나지 않음을 뜻하므로 병합할 때 또한 B파일..
Fast Forward 병합 먼저 다음과 같은 프로젝트가 있다고 가정해보자. 이 프로젝트에서 발생한 이슈를 해결하기 위해, 이 이슈에 집중할 수 있는 브랜치를 새로 만든다. 브랜치를 만들면서 checkout 까지 한 번에 하려면 $ git checkout 명령에 -b 옵션을 추가하면 된다. 따라서 $ git checkout -b issue 명령을 실행하면 아래와 같은 상태가 된다. 또한 issue 브랜치로 checkout 했기 때문에 HEAD는 issue브랜치를 가리키는 상태이다. 그러므로 뭔가 작업을 하고 커밋을 하면 issue 브랜치가 앞으로 나아간다. 만일 이상태에서 중요한 문제가 발생해서 현재 작업을 중단하고 즉시 문제를 해결해야 할 상태가 되면, 다른 복잡한 과정 없이 master 브랜치로 돌아..
브랜치란 원래의 코드에서 분리하여 독립적으로 어떤 작업을 진행할수있게 해주는 개념이다. 새 브랜치 생성하기 브랜치를 생성하는 방법은 아래와 같이 git branch 명령으로 할 수 있다. $ git branch test 를 실행해보면 그림과 같이 test라는 새로운 브랜치가 생성되고 작업하고 있던 마지막 커밋을 가리키게 된다. 여기서 master 브랜치는 처음 자동으로 생성되는 브랜치이고, 동그라미로 표시된것은 생성된 커밋들이다. 그리고 HEAD라는 지금 작업중인 브랜치를 가리키는 특별한 포인터가 master 브랜치를 가리키고 있다. 브랜치 이동하기 지금 HEAD가 master를 가리키고 있으므로 test브랜치에서 작업하기 위해서는 HEAD를 옮겨 주어야한다. 아래와 같이 git checkout 명령으로..
Alias는 별명이라는 뜻으로, Git Alias를 사용하면 Git 명령어에 새로운 별명을 붙여줄 수 있다. 사용하는 방법은 다음과 같다. $ git config --global alias. 예를 들어 파일을 Unstaged 상태로 변경하는 명령을 만들기 위해서는 아래와 같이 사용하면된다. $ git config --global alias.unstage 'reset HEAD --' 또한 !를 명령 제일 앞에 추가하면 외부 명령어도 실행할 수 있다. $ git config --global alias.clear '!clear' 이로써 clear 명령은 앞으로 git clear로 실행이 가능하다.
태그 조회하기 Tag란 Git에서 커밋을 참조하기 쉽도록 알기 쉬운 이름을 붙이는 것을 말한다. $ git tag 명령으로 만들어진 모든 태그를 확인할 수있다. 만약 검색 패턴을 사용하여 태그를 검색하고 싶다면 -l 또는 --list 옵션을 사용하면 된다. $ git tag -l "검색 패턴" 태그의 종류 Git의 태그는 Lightweight 태그와 Annotated 태그 두 종류가 있다. Lightweight 태그는 브랜치와 비슷하지만 브랜치처럼 가리키는 지점을 최신 커밋으로 이동시키지는 않는다. 단순히 특정 커밋에 대한 포인터일 뿐이다. 한편 Annotated 태그는 Git 데이터베이스에 태그를 만든 사람의 이름, 이메일과 태그를 만든 날짜, 그리고 태그 메세지도 저장한다. 또 GPG(GNU Priv..