2010-02-08 11 views
16

git rebase을 사용하여 master 브랜치의 기능을 깨끗하게 병합합니다 (커밋 수를 줄이거 나 적어도 변경 로그 맨 위에 표시). 저장소에있는 유일한 사람은입니다.Git rebase를 푸시/풀하는 방법

Git workflow and rebase vs merge questions을 읽은 후, 나는 git rebase 꽤 좋은 미가처럼 내가 다른 장소에서 그들을 일하고 있어요 단순히 때문으로 업데이트 변경을 git push하고 싶은 것 발견 (예 : 내 노트북, 내 집, 다른 PC 어딘가에 ...)

그래서 여기에 양방향 추한 병합에 대한 두 가지 솔루션()입니다

  1. 가 밀어 git push -f를 사용하고 다른 컴퓨터에 당겨,하지만 얼마나 깨끗하게 최신 버전을 다운로드합니다 다른 기계에?
  2. 기능 지점, 자식 푸시/풀, 한 번 성숙, (하나 이상의 깨끗하게 커밋) 단일 REBASE을

(2) 다음과 같은 것까지 마스터 변경 병합 병합 사용 :

git co -b feature-a 
... change files 
git push origin feature-a 
... moving to another PC 
git pull origin feature-a 
... change files 
git merge master 
... change files (not the "special rebase") 
git rebase master 
git co master 
git merge feature-a 
git branch -d feature-a 
git push origin :feature-a 

어떤 솔루션이 효과가 있습니까? 나는 지금까지 (대부분 내 로그를 더 지저분하게 만드는 것에 대한 두려움 때문에) 그들 중 어느 하나도 시도하지 않았다.

답변

11

git rebase은 변경 사항을 재생하고 새로운 커밋을 만듭니다. 리베이스 (rebase)와 강요 (forcing)를 강요하면 툴의 곡물에 반대하게됩니다. git rebase 문서의 "Recovering from an upstream rebase" 섹션 (추가 중심으로) 시작하는 방법을 참고 :

리베이스 (또는 재 작성 다른 형태의) 다른 사람들이 작업을 기반으로 한 지점 것은 나쁜 생각이다 : 그것의 다운 스트림 사람이 강제로 수동으로 기록을 수정합니다. 이 섹션에서는 다운 스트림의 관점에서 수정 작업을 수행하는 방법에 대해 설명합니다. 그러나 실제 수정 사항은 처음에 업스트림을 리베이스하는 것을 피하는 것입니다.

당신이 유일한 개발자 비록, 당신은 여전히 ​​다른 사람이 될 것입니다 (하나 개의 repo의 관점에서) 다른 클론에서 작업 할 때. 보시다시피이 워크 플로는 번거로운 작업입니다.

분기에서 변경 사항을 요리하십시오. 분기가 primetime에 대한 준비가되면 , 리베이스를 병합 한 후 마스터로 병합하고 해당 분기를 삭제하십시오. 지점 생활 시간을 짧게 유지하고 범위를 좁히면 인생이 가장 쉬울 것입니다.

+0

내 제안에 옵션 (2)처럼 보입니다. – Wernight

+1

"가지에 변화를 요리하게하십시오." 이 의견을 이해할 수 없습니다. 그는 이미 새로운 변경 사항에 대해 주제 분기를 사용하고 있습니다.질문의 핵심은 당신 주위에있는 모든 사람들을 괴롭 히지 않고 원격 브랜치 (branch)와 리베이스 (rebase)를 결합하는 방법 인 것 같습니다. –

13

나는 내가 떠나는 어떤 기계에서나 모든 것을 저지르고 (-f) 밀어 넣는다.

나는 다른 기계에 도착하면 : 나는 "나"다른 사람을 알고 서로 다른 컴퓨터에서 일관되게 내가 떠나기 전에 (따라서에는 unpushed 변화가 없다 커밋 밀어 때문에

git fetch -v 
git checkout mybranch # Already checked out with old HEAD 
git reset --hard origin/mybranch 

이 잘 작동 기계 내가 도착)

+0

현재 변경 사항에 대한 패치를 만들고 앞으로 작업 할 다음 컴퓨터에 패치를 전송합니다. 내 개인적인 규칙은 깔끔하게 컴파일하고 모든 테스트를 통과하는 코드 만 커밋하는 것입니다. 그러나 이것은 상당히 고통스럽고 나는 당신의 접근법을 꽤 자주 생각해 왔습니다. 다른 한편으로는,이 muddy 기계에 역사/reflog 아닌가요? –

+0

다른 누군가와 함께 작업하는 경우 이것은 매우 나쁜 습관입니다.''push -f'는 다른 스토리를 삭제하고 재 작업하도록합니다. – rvazquezglez