2014-10-15 2 views
2

내가 git에 비교적 새로운 해요, 적절한 워크 플로우에 대해 조금 주위를 읽고있다 커밋,하지만 난 이전 커밋 rebase/squash가 하나의 응집력에 커밋에 제안 조금 사투를 벌인거야 다른 repos (예 : 내 경우에는 github)로 푸시.사용하여 태그

내 주된 문제는 내가 취미 인 프로그래머 (운이 좋다면 하루에 1-2 시간)입니다. 즉, 응집력있는 기능 커밋 시점까지 며칠 또는 몇 주가 걸릴 수 있습니다. . 또한, github 내 백업입니다. 따라서 내 워크 플로는 일반적으로 1-5 개의 작은 커밋 (대부분은 고정 된 어리석은 오타 모음)으로 이루어져 있으며 저녁마다 한 번만 github 리포에 푸시됩니다. 비교적 깨끗한 커밋을 게시하고 github을 백업으로 사용한다는 목표는 호환되지 않는 것으로 보입니다.

내 커밋을 수행하는 대신 rebase 대신 기능 또는 버그 수정을 완료 할 때마다 태그를 추가하기 만하면됩니다. 이것은 같은 합리적인 대안처럼 날 것으로 보인다 :

  • 않습니다
  • 방금 ​​필터링 만 중요한 커밋 볼 수 있습니다 (일반적으로 할 나쁜 일처럼 보인다)되지 다시 쓰기 역사 태그 및 diffing의 B/W 태그에
  • "전체"사이의 백업으로 다른 자식의 repo를 (예를 들어 github)를 사용하여 호환 내가 조금 주위를 검토 ​​한 결과

커밋하지만,이 "정리 된"커밋 작업 흐름의 대안으로 제공되는 것 같지는 않습니다. 내가 놓친 게 있니?

+1

백업 분기를 커밋 할 수없고 그 분기에서 복제/분기하고 Github 또는 다른 곳으로 밀어 넣을 이유가 없습니다. – isherwood

+0

@isherwood, 의미가 있습니다. 태그 기반의 접근법을 좋지 않은 행동이라고 생각하십니까? – BrodieG

+0

태그는 커밋의 친숙한 이름입니다. 당신이보기에 그들을 사용하십시오. :-) – isherwood

답변

1

git history를 다시 쓰는 것이 일반적으로 나쁜 일인데, 특히 다른 사람이 당신과 같은 지점에 기여한 경우에 동의합니다.

완료된 기능을 나타내는 커밋 또는 관련 버그 수정 세트를 사용하여 마스터 브랜치에서 git 내역을 유지하려면 원하는 범위의 분기를 만드는 것이 좋습니다. 예를 들어, 마스터하는 첫 번째 3 커밋

  • 스텁 아웃 클라이언트 측 모델과 뷰
  • 업데이트 최신 버전의 자바 스크립트 라이브러리
  • 버그 수정과 같습니다 이벤트 위임 및 설정 페이지에서 렌더링 불일치를 해결

위 목록의 첫 번째 커밋은 master로 체리 선택되기 전에 리베이스 한 siteSetup이라는 지사에서 만든 일련의 커밋 일 수 있습니다.

이 샘플 지점 siteSetup는 다음

  • 스텁 아웃 클라이언트 측 모델과 뷰
  • 아차 >>
  • 수정 오타 또 다른 오타
  • 수정을 투입해야 할 수도 있습니다 ...한숨

브랜치를 사용하면 변경 사항을 마스터로 커밋하기 전에 커밋을 리베이스 (rebase)하는 동안 커밋을 "엉망으로 만들 수 있습니다.

+0

감사합니다. (+1)하지만 제 생각에는 제 커밋의 모든 것을 마스터에 병합하고 사람들이 태그에 의지하여 의미있는 점을 확인하고 다시 걱정하지 않도록하는 것이 왜 괜찮은지/받아 들일 수없는 이유라고 생각합니다. -writing history. – BrodieG

+0

git 태그를 사용하는 방법은 http://git-scm.com/book/en/Git-Basics-Tagging에서 다소 간략하게 설명되어 있습니다. 릴리스를 나타 내기 위해 태그를 사용합니다. 커밋의 혼란을 마스터에 병합하지 않는 이유는 변경 로그가 릴리스 용으로 함께 사용될 때 릴리스를 커밋하는 사람은 커밋 메시지를 검토해야하기 때문입니다. https://github.com/your- organization/your-repo/commits에 영향을 줄 수 있습니다. 특히 많은 수의 커밋이 있거나 커밋 메시지 자체가 그다지 설명 적이 지 않은 경우에는 시간이 많이 걸릴 수 있습니다. –

0

분기 (사지)로 이동하여 이러한 작업을 수행하는 적절한 방법은 리바운드를 피하고 열정적으로 지점을 지정하고 가장 중요한 것은 으로 병합하는 것입니다.

이 위대한 2010 Vincent Driessen blog post은 내가 상상했던 것과 거의 일치하는 워크 플로를 보여줍니다. 메인 릴리즈 브랜치는 깨끗하게 유지되며 쉽게 검사 할 수 있지만 기록은 다시 쓰거나 잃어 버리지 않습니다. 핵심 부분은 과 병합되어 커밋이 사소한 커밋과 주요 커밋 사이에 무엇인지 쉽게 알 수 있습니다. 당신은 꼬리표를 붙일 필요조차 없다. 같은 그런

일 :

git checkout master 
git log --oneline --graph --all --decorate=full 
git log --oneline --graph --all --simplify-by-decoration --decorate=full 

당신에게 마스터 브랜치에 중요한 변경이 무엇인지의 새 눈보기를주십시오.

나는 여전히 git에 비교적 새로운 해요,하지만 난 힘든 시간 rebase/squash이 방법에 바람직해야하는 상황을 상상하는 데 문제가 있습니다.