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 add
는git --help add
답변
vim을 사용하는 경우 fugitive 라는 훌륭한 플러그인을 사용해보십시오 .
을 사용하여 작업중인 복사와 색인간에 파일의 차이점을 볼 수 있으며 :Gdiff
, 다음과 같은 고전적인 vim diff 명령을 사용하여 색인에 줄이나 덩어리를 추가 할 수 dp
있습니다. 색인에 수정 사항을 저장하고로 커밋 :Gcommit
하면 완료됩니다.
답변
Atlassian의 SourceTree 를 사용하는 것이 좋습니다 . (무료) 이것은 사소한 일입니다. 개별 코드 덩어리 또는 개별 코드 줄을 빠르고 쉽게 스테이징 할 수 있습니다.
답변
사용에 협조 할 git add --patch
A의 새 파일 처음으로 인덱스에 파일을 추가해야합니다 git add --intent-to-add
:
git add -N file
git add -p file