2017-02-10 5 views
2

죄송합니다. 어딘가에 중복 파일이있는 경우, 해결책을 검색 할 때 커밋 메시지를 변경하기 위해 익사 한 것으로 나타났습니다.git에서 동일한 파일의 변경 사항을 다른 커밋으로 분할 할 수 있습니까?

I 한 각 커밋 의 일부가되어야 변화의 두 가지가있다. 불행히도, 나는 아침에 두 번째 체인지 셋을 시작했는데, 전에 저녁에 첫 번째 커밋을 잊어 버렸음을 알지 못했다.

대부분의 경우 다른 파일에 영향을줍니다. 그러나 두 변경 집합에 대한 변경 내용이 포함 된 파일 하나가 두 번째 변경 집합없이 푸시 될 경우 빌드를 손상시키는 파일이 하나씩 두 개 있습니다 (). 너무 나빠질 때까지 별도의 지점에서 작업하고 싶다.

슬프게도, 나는에게 (누르지 않음) 이미 이 저지른 첫 번째 변경 집합을했고 나는 모두에 대한 변경 사항이 포함 된 파일이 있다는 것을 발견 할 때 그 위에 작업 지점를 만들었습니다.

커밋을 편집하여 변경 집합 2에 영향을주는 변경 사항을 추출 할 수있는 방법이 있습니까?

의욕에서, 당신은

  1. 에 의해 커밋을 수습 할 수
  2. , 패치로 변환 텍스트 편집기에서를 열고 당신의 의욕 GUI 경우
  3. 은 (패치 파일 사이 DIFF의 라인을 이동 당시에는 열리지 않았다).

GUI를 다시 열면 예상 한 내용이 포함 된 패치가 완료되고 푸시 될 수있었습니다.

이것이 실제로 내가 목표로 삼는 워크 플로입니다. git과 비슷한 것이 있습니까?

도구는 내가 사용하고 있습니다 : TortoiseGit 및 GitExtensions을 Win10

편집 : 솔루션을 변경 집합에 나에게 변경 집합을 1 old_branchnew_branch을 제공 대답

git checkout new_branch 
git reset -p HEAD~1 
git add -p 
... 
git commit -m "my changeset 1" 
git add 
git commit -m "my changeset 2" 
git checkout old_branch 
git reset --hard <new_branch>~1 

에서 제안 2.

다시 한번 감사드립니다!

답변

2

git add -p을 사용하면 커밋 할 변경/헌크를 선택적으로 준비 할 수 있습니다. 첫 번째 배치를 커밋 한 후에는 두 번째 변경 사항 집합으로 남겨 둘 수 있습니다.이 경우 파일을 보통으로 추가하고 커밋 할 수 있습니다.

각 커밋에 대해 원하는 것을 묻습니다. '?'를 입력하십시오. 도와주기 위해. 행크를 준비하려면 'y'를 누르고 준비 영역에서 행크를 제외하려면 'n'을 누르십시오.

큰 덩어리로 큰 덩어리를 선택하지 않은 경우, 큰 덩어리로 무엇을해야할지 묻는 메시지가 나오면 'e'를 누르면 편집기가 열리 며 원하는 부분을 선택할 수 있습니다. 당신이 포함하고 싶은 덩어리.

최근에 자세히 알아보고 매우 유용합니다.

+0

선제 솔루션에 감사드립니다. 저것은 분명히 미래를 위해 유의할 것입니다. 이미 커밋 된 변경 집합에서 변경 사항을 제거하는 방법이 있습니까? – starturtle

+1

@TinyT 행크에서 무단계하기위한'git reset -p'가 있습니다. (스테이징/인덱스 영역에서 삭제합니다) – jbu

+0

고마워, 새로운 브랜치에서'git reset -p HEAD ~ 1'을 사용했습니다. 'a'를 버리고 싶지 않았기 때문에), 올바른 순서로 변경 사항을 커밋 (GUI 커밋 도구를 사용하여 git add -p 설정을 죽였을 때 불행하게도, 나는 post-version을 복사해야했다. 내 혼합 파일, changeset 2 실행 취소, changeset 1 커밋, 파일 덮어 쓰기 및 changeset 커밋 2)를 수행 한 다음 이전 분기를 변경 세트 1으로 하드 리셋하여 다른 분기 커밋을 삭제합니다. – starturtle