2009-11-12 5 views
85

커밋 쌍 중 하나만 사용해야합니다. git을 사용하고 있다면 다음과 같이 사용합니다 :Mercurial에서 커밋을 스쿼시 할 수 있습니까?

그런 다음 스쿼시합니다.

나는 그것을 수은으로 할 수 있습니까? 그렇다면 어떻게?

+0

@ Ry4an : 고마워, (단어의 다른 선택) 통지하지 않았다. –

+0

그래, 그 질문을 좀 더 분명히했기 때문에 잠시 그걸 발견했다. –

답변

80

예, 확장자가없는 수은을 사용하면 Concatenating Changesets을 사용할 수 있습니다. 당신이 확장 기능을 사용하려면

다른 방법으로 당신은 사용할 수 있습니다

+0

그래, 난 일반적인 질문에 대한 내 의견에 내가 좋아하는 속임수 질문 중에서 그 대답을 낚았 어. 나는 그것이 당신 대답이라고 생각합니다. –

+0

접기 확장 프로그램은 설치하기 쉽고 사용하기 쉽고 정확하게 찾고자했습니다! – MattGWagner

+3

작은 쪽 메모 : Histedit 확장은 Mercurial 2.3 이상과 함께 배포됩니다. 방금 활성화해야합니다. – Paidhi

35

내가 제일 좋아하는 hg strip --keep 명령 Collapse Extension

  • 입니다. 그런 다음 모든 변경 사항을 커밋합니다.

    내 일상 업무 중 많은 작은 커밋을 할 좋아하기 때문에 그것은, 나를 위해 가장 빠르고 가장 편안한 방법입니다

    )


    주 1 : 내장 된 확장 mq 필요 strip을 사용할 수 .
    참고 2 : 좋아하는 Git/Mercurial 클라이언트 (SmartGit/Hg)는 strip 동안 기본값으로 --keep 매개 변수를 추가합니다. 무엇보다 편리합니다 : join commits이라는 옵션을 제공합니다 :]

  • +4

    hg 스트립에 대한 전체 명령은 다음과 같습니다. 'hg strip --keep --rev [rev]' 여기서 'rev'는 마지막 하나를 스쿼시하고 싶은 첫 번째 커밋의 개정판 번호입니다. –

    +3

    @NicolasForney 정확하게 --rev는 선택 사항입니다. 전체 명령은'hg strip --keep [rev]' –

    +0

    입니다. 3.3.3에서 나를 위해 :'hg help strip'은' hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV ...'그리고 개정을 생략하면'abort : 빈 리비전 세트 '가 생깁니다. –

    21

    Rebase extension은 매력처럼 작동했습니다. 2 커밋을 스쿼시하려면 :

    $ hg rebase --dest .~2 --base . --collapse 
    

    점은 현재 개정판의 바로 가기입니다.

    $ hg rebase --dest {destination branch (e.g. master)} --base . --collapse 
    

    을이 작동하는 방법 : 당신이 나뭇 가지에 몇 커밋이 하나에 모두 붕괴 할 때

    그것은 심지어 쉽게

    enter image description here

    ( http://mercurial-scm.org/wiki/RebaseExtension#Collapsing에서)
    +0

    이것은 완벽합니다! – phouse512

    +0

    두 커밋에 대해 "~ 2"는 어디에서 찾았습니까? –

    +0

    revsets 항목에서 설명합니다. hg help revsets를 참조하십시오. – markand

    5

    이 답변을 읽는다면 다른 모든 것을 잊어 버릴 수 있습니다. 이온 이 답에 언급되어 있고 evolve extensionfold 명령을 사용하십시오.

    evolve은 안전한 변경 가능 기록을 유지하는 데 도움이되는 수은의 확장이며, 아직 실험 중입니다. repo에서 복제하여 이것을 .hgrc에 추가하여 사용할 수 있습니다.

    [extensions] 
    evolve = ~/evolve/hgext/evolve.py 
    

    홈 디렉토리에 evolve repo를 복제했다고 가정합니다. 이제 너는 잘하게된다. hg help fold으로도 도움을받을 수 있습니다.Fold Command

    당신은 파손되지 않은 커밋의 선형 체인을 배/스쿼시 fold 말한다. 어떤 폴드가 무엇인지는 모든 changesets의 변경 사항을 포함하는 새로운 changeset를 생성하고 모든 커밋을 쓸모없는 것으로 표시합니다. docs에서 자세한 내용을 확인할 수 있습니다.

    이제 다음과 같은 기록이 있다고 가정합니다.

    a -> b -> c -> d -> e -> f -> g 
    

    당신은 e, fg 스쿼시 싶습니다. 당신은 h 모든 세 개의 커밋 e, fg 변경 사항을 포함하는 변경 집합입니다 결과는

    a -> b -> c -> d -> h 
    

    될 것

    hg up g 
    hg fold -r e 
    

    할 수 있습니다.

    역사의 중간에서 변경 사항을 접을 수도 있습니다. 즉, 팁이 포함 된 체인을 선택할 필요는 없습니다. b, cd을 접으려고한다고 가정합니다. 당신은

    hg up d 
    hg fold -r b 
    hg evolve --all 
    

    이것은 ib, c, dj의 접힌 변경 집합이 h와 같은 변경 집합입니다

    a -> i -> j 
    

    가 발생합니다 할 수 있습니다. Evolve user guide 반드시 읽어야합니다.

    +0

    rebase 커버가 확장 기능의 대부분을 사용하고있는 것처럼 보입니다. 물론이 질문에서 요청되는 케이스도 있습니다. 이 확장 기능의 킬러 기능은 당신이 대체하는 개정판을 숨기고 (삭제하는 것이 아니라) rebase의'--keep' 옵션이 이것을 다루고 있습니다. (개정판을 비밀로 표시하거나, 결과). 일련의 두 rebase 명령을 사용하여 다른 개정 사이에서 개정을 이동할 수도 있습니다. –

    +0

    ... 더하기, 만약 당신이 정말로 복잡한 일을하고 있다면, 항상 로컬 repo를 복제하여 백업으로 사용할 수 있습니다. 얼마나 희귀 한가 (잘하면!), 완전히 새로운 확장 기능을 사용하는 방법을 배우는 것보다 노력이 적습니다. –

    관련 문제