본문 바로가기
개발/Git

git

by 감토끼 2011. 5. 19.



git add : 변경 사항을 스테이징
스테이징 영역 : 저장소에 커밋하기 전에 커밋을 준비하는 버퍼 같은 공간

왜 한번에 커밋하지 않지? --> 커밋 전에 정교하게 다듬을 수 있는 기회를 준다.

커밋 방법 세가지:
----스테이징 시점의 변경사항
1. 스테이징(파일 지정 : git add filename)후 커밋
(변경한 일부분만 추가: git add -p filename)
: git add -p 처럼 파일을 일부만 커밋할때 유용하다.

--- 커밋 시점의 파일 내용
2. 작업트리의 가장 최근 버전으로 커밋 : git commit -a
: 기존에 추척하던 파일만 커밋됨.

3. 파일 지정하여 커밋 : git commit filename
:


git diff


git diff : 작업 트리 변경사항과 스테이징 영역 비교
git diff --cached : 스테이징 영역과 저장소 차이
git diff HEAD : 작업트리, 스테이징 된 변경 사항, 저장소의 모든 차이


git mv index.html new.html : 기존 파일의 이력을 유지한 상태로 원본파일 이동
(git add + git rm)


git은 파일이 아닌 파일 내용을 추적한다.




.gitignore : 저장소 차원의 무시
.git/info/exclude : 개인 컴퓨터만 무시.



git에서는 모든게 브랜치로 간주되므로 브랜치를 생성하는 비용이 크지 않다. 모든 파일을 새로운 디렉터리로 복사하는 다른 시스템과는 다르게 git의 브랜치는 해당 브랜치가 만들어진 시점부터 적용된 커밋만 추적


브랜치를 생성 시 고려사항 ?
1. 실험적인 변경 사항 : 알고리즘 재작성, 리펙토링 등
2. 새로운 기능을 추가 할 때마다
3. 버그 수정: 특히 수정한 버그에 확신이 서지 않을 경우 적합.


git branch : 브랜치 목록
git branch -m old new : 이름바꾸기
git branch new [master] : 생성
git checkout new : 작업 트리가 된다.
 

바로 합치기straight merge : 하나의 브랜치를 선택해서 다른 브랜치와 합침, 해당 브랜치의 전체 이력을 다른 브랜치에 반영
git checkout master
git merge alternate


커밋 합치기Squashed Commit : 브랜티의 모든이력을 압축하여 다른 브랜치에 하나의 커밋으로 만듦. 이것저것 실험해봐야 하는 새로운 기능을 만들거나, 버그를 수정할때 유용. 실험한 내용을 추적하지 않아도 되므로.
git checkout master
git merge --squash contact
git commit -m "add contact page"

선택하여 합치기 : 브랜치 전체가 아닌 오직 하나의 커밋만 합칠 필요가 있을때. 브랜치에 아직 사용할 수 없는 기능이 있거나 해당 브랜치에는 아직 준비가 안 된 변경 사항이 있을 수 있기 때문에 전체 합치기가 적합하지 않은 경우가 있다. 수정된 버그나 브랜치들 사이에 공유해야 하는 클래스를 추가하는 경우가 이런 상황에 해당.

git checkout master
git cherry-pick 321d76f





git mergetool
git branch -d about2 : 머지가 성공했을때만 지울수 있음. 강제 : -D



git branch -r : remote 브랜치 보기
git fetch :  지역 저장소의 원격 브랜치가 갱신된다.
원격 서버에서 변경 사항을 가져와서 동시에 지역 브랜치에 합치려면 git pull
git push : origin 저장소에, 같은 이름의 브랜치에 푸싱
git push origin mybranch:master

origin: 기본 원격 저장소: 복제한 저장소의 전체 이름에 대한 별칭.