티스토리 뷰

카테고리 없음

GIT 공부

희나람 2014. 7. 27. 04:06


명령어 참고

[ http://gitref.org/ ]


Step2


git reset --hard

현재 상태에서 있는 파일을 뒤로 되돌린다.


그러나 커밋되지 않고 수정되지 않은 파일, 인덱스에 없는 파일은 삭제되지 않는다.


git clean -xdf

이렇게 하면 마지막 커밋 상태로 되돌릴 수 있다.



깃 헤드 돌리기


git reset --hard 5fd0

이런 씩으로 헤드를 옮겨갈 수 있다,

reset은 특정 시점으로 돌아간다고 볼 수 있다.



git reflog

헤드의 로그를 나타냅니다.

head 가 옮겨진 로그가 남겨지있다.



Step3


git branch

깃 브랜치 종류가 나온다.

git branch [이름]

[이름]의 브랜치를 추가한다.


git checkout [이름]

[이름]의 브랜치로 이동한다.


git commit --amend

이전 커밋의 메세지 내용을 다룬다.


topic branch란?

git은 브랜치를 이용해서 topic을 만들 수 있는데, 이는 git 특성상 만드는데 비용이 싸기 때문이다.

마치 링크드리스트처럼 사용할 수 있기 때문이다. 포인터만 변경해주면 되기 때문이다.


gitk --all

모든 브랜치를 다 보이게 할 수 있다.

gitk는 자신의 head만 보이는데, 이때 all 명령을 주면 다 볼 수 있다.


git merge [브랜치이름]

2개의 브랜치를 합친다.


git branch -d [issue001]

issue001이라는 브랜치 삭제


git checkout -b issue001

issue001이라느 브랜치를 만든다.


git mergetool -t vimdiff

git merge를 하다보면 comflict가 난다. git status라고 치면 에러가 뜨는데, 이때 이것으로 해결 할 수 있다.


vimdiff 에서 wqa!로 나온다.



//========================================

remote는 서버가 아니다. 로컬 저장소의 연속 선상에 있다.

나는 로컬이며, 남들은 모두 리모트라고 보면 된다.

그래서 서버가 하나다, 이런 구조가 아니다.


clone을 하면, 독립적으로 가능하다.


리모트 저장소에서 가져온 데이터를 로컬에서 보려면,

git branch -a

리모트의 브랜치를 가져온 것을 볼 수 있다.


로컬과 리모트를 구분하기 위해서 이름이 remotes/orgin/mater 이렇게 붙는다.


git remote

리모트 이름들이 뜬다.

git remote show origin,

그 리모트의 정보를 볼 수 있다.


git remote rename origin qkdlct

이후,

git branch -a 를 통해

브랜치가 변화한 것을 알 수 있다.


git remote -v

fetch와 push의 기본 정보


로컬 git 의 정보는?

.git/config


여기서 remote를 트랙킹한다는 것은 무엇인가?

리모트에서 작업을 한 후, 

devA에서 git pull을 하면 업데이트 된다.

왜 리모트 이름 없이 되는가? 트랙킹 브랜치가 config에 값이 있기 때문이다.

가령,

[brach "master"]

 remote = qkd

 merge = refs/heads/master

로 qkd의 master를 트랙킹 중이다.


devA에서 커밋을 해보자.

그후 git status를 치면

your branch is ahead of 'qkd/master' by 1 commit

커밋이 하나 앞선다는 말이다.


푸시를 해보자

git push qkd HEAD:master

현재 로컬의 HEAD를 리모트의 master로 넣겠다는 말이다.

그러나 master에 에러가 난다.

왜냐하면 리모트 master는 리모트에서 작업중인 브랜치이기 때문이다.


nonbare repository와

bare repository의 차이가 있다.

노출 시켜서 쓸 수 있느냐 아니냐의 차이


nonbare repository에서는 다른 git bracnh를 만들어준다.

git push qkd_origin HEAD:devA_topic1



그러면 다시 qkd로 가서

git diff devA_topic1

한 후

git merge devA_topic1

으로 머지, 그러면 fast forawrd merge가 된다.


이후 다시 devA 로 돌아가서

gitk --all 로 보면

이상하게 아직 적용이 안되어 있다.

이는 로컬이기 때문.


git remote add