목록Git (10)
코딩하는 바나나

rebase는 merge와 그 기능이 같다. 한 브랜치에서 다른 브랜치로 합치는 기능을 한다. 하지만 그 결과가 조금 다르다, 먼저 앞서 배웠던 merge의 경우 3-way-merge를 할 경우 새로운 커밋이 생기며 브랜치가 합쳐진다. 그러나 rebase를 할 경우 이 보다 커밋 기록을 조금 더 깔끔하게 할 수 있다. 더보기 $ git checkout experiment $ git rebase master $ git checkout master $ git merge experiment 이와 같이 명령을 하면 먼저 두 브랜치의 공통 커밋인 C2로 이동해 현재 브랜치인 experiment의 가장 최근 커밋인 C4까지 diff를 만들어 임시로 저장하고 experiment를 master가 가리키는 커밋을 가리키..
리모트 저장소에 있는 브랜치들은 리모트 Refs라는 리모트 저장소에 있는 포인터가 가르키고있다. 더보기 $ git is-remote [remote] 위의 명령으로 모든 리모트 Refs를 조회할 수 있다, gir remote show [remote] 명령어는 모든 리모트 브랜치와 그 정보를 보여준다. 리모트 Refs가 있지만 보통은 리모트 트래킹 브랜치를 사용한다. 리모트 트래킹 브랜치 리모트 트래킹 브랜치는 리모트 브랜치를 추적하는 브랜치이다. 리모트 브랜치와 달리 리모트 트래킹 브랜치는 로컬에 있지만 임의로 움직일 수 없다. 리모트 서버에 연결할 때마다 업데이트되어 자동으로 갱신된다. 리모트 트래킹 브랜치의 이름은 / 형식으로 되어있다. -> origin/master. 우리가 git clone을 하면 ..

브랜치와 Merge 먼저 master브랜치에 몇개의 커밋이 있다고 가정하자. master브랜치에서 어떤 이슈를 해결 하기 위해 새로운 브랜치를 생성하고 작업을 하고있다. 그런데 운영 중이던 코드에 버그를 발견해서 지금 당장 해결해야 하는 상황이 왔다. 이런경우 master브랜치로 돌아가서 새로운 브랜치를 생성해서 해결해야 할 것이다. 아래의 그림과 같이 말이다. 버그를 수정하기 위한 hotfix브랜치와 이슈를 처리하기 위한 iss53브랜치가 있다. hotfix브랜치에서 수정이 급한 버그를 처리하고 커밋을 했다. 이 내용을 master에 반영해 주기위해 우리는 merge를 해주어야한다. 더보기 $ git checkout master $ git merge hotfix 위의 명령어로 hotfix브랜치를 mas..

브랜치를 알기 전 git이 데이터를 다루는 방법을 먼저 알아야 한다. git 저자나, 커밋 메세지 같은 메타데이터, 이전 커밋에 대한 포인터, 현재 커밋에 대한 포인터를 포함하는 커밋 개체를 저장한다. 이전 커밋 포인터가 있어서 현재 커밋이 무엇을 기준을 바뀌었는지 알 수 있다. 그리고 기본으로 처음 커밋을 하면 master 브랜치가 생성된다. 브랜치 더보기 $ git branch testing 다음은 testing이라는 이름의 새로운 브랜치를 만드는 명령어이다. 그림과 같이 testing이라는 새로운 포인터가 최근 커밋을 가르킨다. 그렇다면 현재 작업하는 브랜치를 git은 어떻게 구분할까? 바로 HEAD라는 포인터를 사용한다. 아직 testing브랜치를 만들기만 하고 checkout 하지 않았기 때문에..
Git Alias를 사용하면 git을 더 편리하게 사용 할 수 있다. 기존에 있는 git 명령어들을 내가 커스텀 해 줄 수 있다. 더보기 $ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status 다음과 같이 설정을 해주면 checkout 대신 co, branch 대신 br과 같이 간결하게 사용 할 수 있다. $ git config --global alias.unstage 'reset HEAD --' 특히 많이 사용하지만 긴 명령어들을 사용할때 편리하다. 이렇게 내가 자주 사용하는 명령어들을..
리모트 저장소 리모트 저장소는 다른 사람과 함께 일하기 위해 필요한 인터넷, 네트워크에 있는 저장소이다. 더보기 $ git remote 위의 명령어로 현재 프로젝트의 저장된 리모트 저장소의 이름을 확인 할 수 있다. git clone을 하게되면 origin으로 리모틑 저장소가 자동저장되게 된다, -v 옵션으로 URL까지 함께 볼 수 있다. 더보기 $ git remote add 위의 명령으로 리모트 저장을 설정 할 수 있다. 보통 origin으로 리모트 저장소를 저장하기 때문에 git remote add origin https://~ 와 같은식으로 사용한다. 리모트 저장소에서 가져오기 더보기 $ git fetch origin 이 명령어를 사용하면 리모트 저장소에서 로컬에 없는 데이터들을 가져올 수 있다. ..

완료한 커밋을 수정하고 싶을때 (너무 일찍 커밋, 파일 빼먹고 커밋, 커밋 메세지 잘못 적었을때) 더보기 $ git commit --amend 이 명령은 수정내용을 staging area에 추가해준뒤 사용해야 한다. --amend로 커밋한 내용은 전에 커밋한 내용을 덮어쓴다 따라서 이전 커밋은 기록에 남지 않는다. 파일을 staged상태에서 unstaged상태로 변경하고 싶을떄 (+reset) 더보기 $ git reset HEAD 파일 해당 파일을 unstaged 상태로 만들어주는 명령어 이다 . reset은 깃이 관리하는 3가지 워킹디렉토리, staging area, HEAD를 나눠서 생각해야한다. 보통 reset을 그냥 수행하면 --mixed옵션이 생략되어있는 것이다. 따라서 위의 git reset ..
커밋 히스토리 조회하기 더보기 $ git log .위의 명령어를 사용하묜 깃의 커밋 히스토리를 확인 할 수 있다. 이는 시간순으로 보여준다. 그리고 각 커밋의 체크섬, 저자 이름, 저자 이메일, 커밋 날짜, 커밋 메세지를 보여준다. 깃 로그에는 여러가지 옵션이 있다. -p, --patch는 각 커밋의 차이점을 보여준다. -2는 최근 두개의 결과만 보여주는 옵션이다. --stat 옵션은 각 커밋의 통계 정보를 보여준다. 어떤 파일이 수정됐는지, 몇개의 라인이 수정되었는지 등을 보여준다. --pretty 옵션은 여러 가지 옵션이 있다. --pretty=online의 경우에는 각 커밋을 한라인으로 보여준다. short, full, fuller 옵션은 여기서 조금씩 가감해서 보여준다. format으로 설정 할 ..