본문 바로가기

git reset git 에는 3가지 로컬 트리가 있다. 1. 워킹 디렉토리(WD)는 버전 관리 중인(tracked) 디렉토리/파일들 이다. 흔히 버전관리 작업하는 로컬 디렉토리라고 생각하면 된다.2. Index(staged) 는 바로 다음에 커밋될 자료들이다.3. HEAD 는 현재 브랜치 마지막 커밋의 스냅샷(포인터)이다. 우리가 워킹 디렉토리에서 파일들을 생성하거나 수정하고 커밋을 하기 위해 add 명령으로 index 에 올린 후, 이 자료들은 commit 시 HEAD 가 된다. 위 3가지 로컬 트리를 이해했다면 reset 을 쉽게 이해할 수 있다.reset 명령은 HEAD 를 이동시킬 수 있다.HEAD 는 가장 마지막 커밋을 참조하는 포인터이지만 reset 명령으로 해당 브랜치의 다른 커밋으로 옮길 수가 있다. (아..
tracking to untracking .gitignore 파일은 버전관리 하지 않는(untracked) 파일을 버전관리 하지 않도록 무시할 수 있다.하지만 깜빡하고 이미 버전관리(tracked) 에 포함이 됐거나 뒤늦게 .gitignore 파일에 추가했다면 tracked 파일은 무시되지 않는다.이럴 때는 해당 파일을 삭제하고 커밋하는 방법도 있지만, 파일을 삭제하지 않고 tracked 파일을 untracked 파일로 변경하는 방법이 있다. $ git rm --cached filenamecs filename 에는 \* 같은 파일명 확장 기능을 사용할 수도 있다.다음 명령은 log 디렉토리의 모든 log 확장자 파일들을 untracked 로 변경한다. $ git rm --cached log/\*.logcs 디렉토리와 디렉토리 내의 모든 파일은 ..
git stash merge 를 하거나 branch 를 변경할 때 기존 작업물을 commit 하거나 stash 하라는 메시지를 볼 수 있다.주로 임시적인 commit 을 행하곤 하는데, stash 라는 기능도 매우 유용하다.요점만 말하자면 현재 수정된 tracked 파일들을 잠시 특정 공간(stack)으로 옮겨주는 역할을 한다.그리고 나서 나중에 다시 되돌리면 끝이다. $ git stash
git amend 마지막 커밋을 수정할 수 있는 방법이 있다. 바로 commit 명령의 amend 옵션을 사용하는 것이다.'기능 추가 완료' 라고 당당하게 커밋 메시지를 추가했는데, 파일 몇개가 빠졌다면, 혹은 '깅ㅡㄴ 추가 완료!' 이런식으로 메시지가 잘못됐을 때 사용할 수 있다. $ git commit --amend -m '기능 추가 완료'cs 라고 명령하면 현재 index(staged) 작업물들이 추가로 커밋되며 이전 커밋에 더해진다. 중요한 것은 commit 시 생성되는 체크섬(cabcbb5b1ac4e7593749e1853f21405ddacc7f88 같은...) 이 수정되므로,이미 push 된 커밋이라면 수정하지 않는 것이 좋다.이미 push 된 커밋을 부모(parent)로 하는 자식들이 있을 경우, 체크섬이 바뀌..
git conflict 해결 merge 시 주로 발생하는 충돌, conflict 는 길게 말할 것도 없다.
git remote branch 원격 저장소에 push 할 로컬 branch 가 아니라면 브랜치 생성이든 삭제든 아무래도 상관없다. 단지 로컬 저장소에서만 이루어 지는 작업이기 때문에.하지만 브랜치를 협업 등의 이유로 팀원과 공유하려면 원격 저장소에 해당 브랜치를 push 하고 팀원들이 fetch 받아 브랜치를 연결(tracking) 하면 된다. 1. 원격 저장소로 브랜치 공유하기 기존의 커밋들을 push 한다고 해서 내가 만들어 놓은 branch 까지 자동으로 올라가지는 않는다.원격 저장소에도 별도로 브랜치를 만들고 로컬 저장소 브랜치와 연결을 시켜줘야 한다. iss53 이라는 로컬 브랜치가 있다면 다음 명령어로 간단히 원격 저장소(origin)에 push 할 수 있다. $ git push origin iss53cs 위 명령은 $ g..
git branch & merge 브랜치 작업을 하거나 충돌날 때마다 도움을 요청하는 중생들을 줄이고자, git 세미나를 준비하면서 정리한 내용들이다. * 목표- 쫄지말고 브랜치(branch) 사용하기.- 충돌(conflict)이 나더라도 쫄지 않기. (기본적인 push, pull 정도는 할 줄 안다는 가정하에 불필요한 내용은 생략한다.) 1. 우리는 이럴 때 branch 를 사용한다. 다음 케이스를 보자.master 브랜치 하나만 가지고 있으면서 이 작업물로 운영서버에 배포를 한다.이 프로젝트에 [기능] 추가 요청이 들어왔고 팀원들과 협업이 필요하다.협업이 필요하기 때문에 원격 저장소에 소스를 공유해야 한다.기능 추가 작업중에 심각한 [버그] 를 발견하여 수정하고 다시 배포를 해야 한다면, 아직 완료되지 않은 [기능] 추가 작업이 같이..
git checkout branch IntelliJ 에서 다른 작업자가 추가한 Remote Branch 를 처음 가져오려고 봤더니, 원격의 최신 branch 상태가 나타나지 않았다.pull 메뉴에서는 최신 branch 가 나타났지만, 현재 로컬 branch 와 merge 하게 되서 최신 branch 가져오는 새로고침만 강타했는데,branch 메뉴에서는 최신 Remote Branch 가 나타나지 않았다. 결국 현란한 구글링 후,메뉴에서 [ VCS | Git | Fetch ] 로 Remote Branch 를 가져왔다. (git fetch)fetch 는 저장소의 작업물을 로컬로 가져올뿐 merge 를 하지는 않는다.fetch + merge = pull