Heart's Develop Inside (WP)

Heart's Develop Blog in WordPress.com

git 사용 practice 모음

leave a comment »

최근 프로젝트에서 git 을 사용하면서 간단한 명령 외에 몰라서 찾아봤던 내용들에 대해 간단히 작성해 보았습니다.
생각나는 대로 작성한 거라 순서 없이 나열하였습니다 ^^;;

1. 커밋 합치기

SVN 과 다르게 GIT 은 병합 시에 대상 commit 본들을 차례로 적용합니다.
그래서 특별한 의미없이, 혹은 로그 메시지를 대충 남기면서 커밋하면 약간 꺼름찍한 부분이 발생하는데요.
rebase 명령을 사용하면 커밋을 합칠 수 있습니다.

저는 지난 4개의 커밋에 대해 하나로 합치면서 로그 메시지를 상세하게(다시) 남기기 위해 rebase 를 이용하였습니다.

git rebase -i HEAD~4

—- 다음 화면에서 —

reword COMMIT1 log1
fixup COMMIT2 log2
fixup COMMIT3 log3
fixup COMMIT4 log4

rebase 시 제공하는 명령은 6가지가 있는데요. (참고)
커밋 합치기는 pick & squash 와 reword & fixup 두 가지 방법으로 접근할 수 있습니다.
기존 커밋 메시지를 활용해서 재작성하는 경우에는 pick & squash 를 이용하고, 커밋 메시지를 새로 작성하는 경우에는 reword & fixup 을 이용합니다.
제가 참조한 문서에서는 reword & fixup 을 애용한다고 하네요.

주의해야 할 점 : remote repository 에 이미 push 한 commit 을 rebase 하는 것은 bad practice 라고 하네요.

references

2. local repository 내용을 버리고 remote branch 내용으로 동기화하기

아래 예제는 local repository 의 master branch 를 remote (origin) 의 master 로 동기화(단방향) 하는 방법입니다.

one-command

git fetch origin && git reset –hard origin/master && git clean -f -d

step by step

git fetch origin
git reset –hard origin/master
git clean -f -d

references

3. remote branch 삭제하기

  • git push origin :heads/<branch name>

references

4. commit / branch 간의 차이 (diff) 얻어내기

명령이 어렵지 않아서 command 사용 방법을 적어 둡니다.

git diff <commit or branch name>..<commit or branch name> [–options]

사용할 수 있는 옵션 리스트

  • –name-status : 파일 리스트 및 변경사항(A,M,D) 만 표시됨
  • –stat : 파일 리스트 및 변경사항(변경된 라인 수, +, -) 만 표시됨
  • –color : diff 결과를 색상으로 표시해 줌 (git config –global color.ui true 로 전역 설정 가능)
  • -w, –ignore-all-space : 모든 whitespace 를 무시 (한 쪽 라인에 whitespace 만 있다면 diff 로 잡히지 않음)
  • –src-prefix : source prefix 지정 (기본은 a/)
  • –dst-prefix : destination prefix 지정 (기본은 b/)
  • –no-prefix : prefix 삭제

references

5. commit 되지 않은 local change 를 별도 보관 / 적용하기

git 을 이용한 작업 중 branch 를 넘나들 때 local change 가 있으면 checkout 이 되지 않습니다.
이 때 local change 가 commit 하긴 부담스러운(부끄러운?) 경우, stash 를 이용하여 임시 보관할 수 있습니다.

git stash

실행하게 되면 local change 가 stash 에 저장되고 working directory 는 revert 됩니다.
기본적으로는 WIP on branchname ~~~ 이런 메시지로 저장되는데, git stash save [message] 형식으로 실행하면 메시지를 포함하여 저장됩니다.

stash 에는 여러 개의 상태를 저장할 수 있습니다. 리스트를 확인하려면 아래의 명령을 입력합니다.

git stash list

특정 stash 의 내용을 확인하려면 아래와 같이 입력합니다.

git stash show <stash name>

변경사항을 diff 형식으로 확인하실 수도 있으며, 아래와 같이 입력합니다.

git diff <stash name>

변경사항을 working directory 에 반영할 때는 아래와 같이 입력합니다.

git stash (pop | apply) <stash name>

변경사항을 stash 에서 삭제할 때는 아래와 같이 입력합니다.

git stash drop <stash name>

변경사항을 branch 로 추출할 수도 있습니다.

git stash branch <branchname> <stash name>

references

  • man git-stash (git-stash –help)
Advertisements

Written by kabhwan

2013년 7월 11일 , 시간: 11:18 오전

Git, VCS에 게시됨

Tagged with , , ,

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: