Git에서 파일의 일부만 커밋 만 커밋하려면

Git에서 파일을 변경할 때 일부 변경 사항 만 커밋하려면 어떻게해야합니까?

예를 들어, 파일에서 변경된 30 줄 중 15 줄만 어떻게 커밋 할 수 있습니까?



답변

당신은 git add --patch <filename>(또는 -p짧게) 사용할 수 있으며 , git은 파일을 합리적인 “hunks”(파일의 일부)라고 생각하는 것으로 파일을 나누기 시작합니다. 그런 다음이 질문을 묻습니다.

Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]?

각 옵션에 대한 설명은 다음과 같습니다.

  • y 다음 커밋을 위해이 덩어리를 준비하십시오
  • n 다음 커밋을 위해이 덩어리를 준비하지 마십시오
  • q떠나다; 이 덩어리 또는 나머지 덩어리를 준비하지 마십시오
  • a 파일에서이 덩어리와 모든 이후 덩어리를 준비하십시오.
  • d 파일에서이 덩어리 또는 이후 덩어리를 스테이징하지 마십시오.
  • g 갈 덩어리를 선택하십시오
  • / 주어진 정규식과 일치하는 덩어리를 검색
  • j 이 덩어리를 미결정 상태로 두십시오. 다음 미정 덩어리를 참조하십시오.
  • J 이 덩어리를 미정의 상태로 두십시오, 다음 덩어리를보십시오
  • k 이 덩어리를 미정의 상태로 두십시오.
  • K 이 덩어리를 미정의 상태로 두십시오, 이전 덩어리를보십시오
  • s 현재 덩어리를 작은 덩어리로 나누십시오
  • e 현재 덩어리를 수동으로 편집
  • ? 덩어리 도움말 인쇄

파일이 아직 저장소에없는 경우 먼저 할 수 있습니다 git add -N <filename>. 이후에 계속할 수 있습니다 git add -p <filename>.

이후에는 다음을 사용할 수 있습니다.

  • git diff --staged 올바른 변경을 수행했는지 확인
  • git reset -p 실수로 추가 된 덩어리를 스테이지 해제하기 위해
  • git commit -v 커밋 메시지를 편집하는 동안 커밋을 봅니다.

이것은 git format-patch커밋 데이터를 .patch파일 로 구문 분석 하는 명령과 는 매우 다릅니다 .

미래를위한 참조 : Git Tools-Interactive Staging


답변

당신은 사용할 수 있습니다 git add --interactive또는 다음과 ( 하지 ); git-add 맨 페이지의 대화식 모드 를 참조 하거나 지침을 따르십시오.git add -p <file>git commit git commit -a

현대 망할 놈도있다 git commit --interactive(그리고 git commit --patch대화 형 커밋에서 패치 옵션 바로 가기된다).

GUI에서 선호하는 경우 git-gui를 사용할 수 있습니다 . 커밋에 포함하려는 청크를 간단히 표시 할 수 있습니다. 개인적으로 사용하는 것보다 쉽습니다 git add -i. QGit 또는 GitX와 같은 다른 git GUI에도이 기능이있을 수 있습니다.


답변

git gui 는 diff보기에서이 기능을 제공합니다. 관심있는 행을 마우스 오른쪽 단추로 클릭하면 “이 행을 커밋하여 스테이지”메뉴 항목이 표시됩니다.


답변

git add -e myfile텍스트 편집기를 열고 스테이지하고 싶은 줄과 원하지 않는 줄을 선택할 수 있기 때문에 이것이 가장 쉬운 방법 이라고 생각합니다 . 편집 명령과 관련하여 :

추가 된 내용 :

추가 된 내용은 “+”로 시작하는 줄로 표시됩니다. 추가 라인을 삭제하여 스테이징을 방지 할 수 있습니다.

제거 된 내용 :

제거 된 내용은 “-“로 시작하는 줄로 표시됩니다. “-“를 “”(공백)으로 변환하여 제거가 준비되지 않도록 할 수 있습니다.

수정 된 내용 :

수정 된 내용은 “-“줄 (이전 내용 제거)과 “+”줄 (대체 내용 추가)로 표시됩니다. “-“행을 “”로 변환하고 “+”행을 제거하면 수정 사항이 스테이징되지 않도록 할 수 있습니다. 쌍의 절반 만 수정하면 색인이 혼동 될 수 있습니다.

에 대한 모든 세부 정보 git addgit --help add


답변

vim을 사용하는 경우 fugitive 라는 훌륭한 플러그인을 사용해보십시오 .

을 사용하여 작업중인 복사와 색인간에 파일의 차이점을 볼 수 있으며 :Gdiff, 다음과 같은 고전적인 vim diff 명령을 사용하여 색인에 줄이나 덩어리를 추가 할 수 dp있습니다. 색인에 수정 사항을 저장하고로 커밋 :Gcommit하면 완료됩니다.

여기에 아주 좋은 소개 스크린 캐스트가 있습니다 (특히 2 부 참조 ).


답변

Atlassian의 SourceTree 를 사용하는 것이 좋습니다 . (무료) 이것은 사소한 일입니다. 개별 코드 덩어리 또는 개별 코드 줄을 빠르고 쉽게 스테이징 할 수 있습니다.


답변

사용에 협조 할 git add --patchA의 새 파일 처음으로 인덱스에 파일을 추가해야합니다 git add --intent-to-add:

git add -N file
git add -p file