2013-04-01 7 views
3

Git을 사용할 때 내 워크 플로에는 일반적으로 TortoiseGit를 실행하고 커밋 할 파일을 선택하는 작업이 포함됩니다.커밋하지 않고 git 인덱스에 파일 추가

이것은 (아마도) 이 (가) (?)을 추가하고이 변경 사항을 로컬 repo에 적용합니다.

제 질문은 - 색인 파일에 파일을 추가하는 것과 파일을 필요로하는 것 사이에 분리가되는 이유는 무엇입니까?

동시에 색인을 작성하지 않고 색인에 파일을 추가하는 용도는 있습니까?

답변

8

색인에 파일을 추가하는 것을 준비라고합니다. 스테이징은 커밋 될 내용과 커밋 외부에 남아있는 내용을 구분합니다. 다른 커밋에 더 적합한 몇 가지 변경 사항을 수행 한 경우 준비없이 그대로두고 인덱스에 추가 된 내용을 커밋 할 수 있습니다.

그래서 본질적으로 간단하고 일관된 커밋을 준비하는 데 도움이됩니다.

3

색인/준비 영역을 상당히 사용합니다. 장바구니처럼 생각할 수 있습니다. 프로젝트를 돌아 다니며 물건을 추가하면서 장바구니를 가득 채울 수 있습니다. 원하는 것을 갖고 나면 (즉, 변경 사항을 구매하고 상점에서 나가십시오.)

큰 특징 중 하나는 패치 추가입니다. git add -p aka git add --patch을 사용하면 파일에서 특정 덩어리를 선택할 수 있기 때문에 다양한 파일의 일부를 실제로 커밋 할 수 있습니다. 저는 Vim을위한 병원균 플러그인을 사용하기는하지만, 매일 작업을하고 있습니다. Vim은 작업 사본과 색인 사본 사이를 오가며 변경하기 위해 매우 쉽고 시각적입니다. 카트에 멋지고 세분화 된 부분 만 추가하면 50 자 이하의 분별력 있고 세분화 된 커밋 메시지로 커밋됩니다. 이로 인해 내 역사는 믿을만한 것이되었고, 한 시간 후에 마음을 바꿔 대화 형으로 리베이스하여 커밋을 한꺼번에 처리하고 더 현명한 흐름으로 바꿔 가며 때때로 커밋마다 단위 테스트를 수행하도록했습니다. 내 역사의 모든 곳에서 깨끗하고 안전한 롤백 포인트.

필자는 패치 추가를 사용하여 파일의 어느 부분이 함께 이해되는지 파악했습니다. Vim에서는 ,gs을 실행합니다. 새 분할 창에서 현재 파일의 repo에 대한 자식 상태가 열립니다. 나는 <C-n><C-p>을 사용하여 실제 메시지와 함께 상태 메시지 행을 건너 뜁니다. 그 라인에 D을 사용하여 분할 창 집합에서 이들을 vimdiff로 변경 한 다음 (diff put) 및 do (diff obtain)을 사용하여 현재 버퍼에서 변경 사항을 이동하거나이 버퍼에서 변경 사항을 이동하여 ]cc[ 상위 홉이 변경으로 변경됩니다 분할에서 작동하고 <C-w>h<C-w>l 버퍼간에 앞뒤로 건너 뛰기). 해당 파일을 준비했으면 :w을 저장하고 <C-w>k은 상태를 다시 분할하여이 방법으로 새 ​​파일을 선택하거나 두 파일 중 -을 둘 중 하나로 설정하여 토글합니다. 그리고 전적으로 스테이징이 없거나 실제로 커밋 할 cc 일 때 커밋 메시지를 요구합니다. 커밋을하기 전에 이러한 방법을 통해 진행되는 모든 작업을 검토 할 수 있으며, 종종이 시점에서 뭔가를 잊어 버렸거나 잘못해서는 안되는 부분을 추가하고 수정한다는 것을 알게됩니다. 따라서 저의 커밋은 오히려 깨끗합니다. commit --amend을 원할 경우 커밋 메시지의 단어를 다시 지정하려는 경우 cc 대신 cA을 사용하거나 ca을 사용할 수 있습니다.

즉, SVN 일 때처럼 전체 파일을 커밋하는 일은 매우 조잡하고 부정확합니다. 작업하는 동안 단 하나의 관심사 만 변경하는 것은 정말 어렵지만 인덱스의 힘을 통해 패치를 추가하면 한 번에 커밋 한 실제 변경 내용을 알 수 있습니다.

0

색인/준비 영역에 추가 한 모든 파일을 커미트 할 필요가 없습니다.

git add fileA 
git add fileB 
git add fileC 

사용 사례 1 :

git commit -m "fileA, fileB added." fileA fileB 

사용 사례 2 : 준비 영역에 추가 한 후 파일의 변경 내용을 추적에만 FILEA와 fileB을 커밋합니다. 그러면 작업 복사본과 파일을 준비 영역에 마지막으로 추가 한 시간의 차이가 표시됩니다.

1

스테이징은 파일의 미니 커밋과 거의 같습니다. 실제로 커밋하기 전에 준비, 재 스테이지, 변경 사항 확인, 가장 최근 단계로 되돌릴 수 있습니다. 여러 개의 커밋을 수행하는 것처럼 여러 개의 미니 커밋을 사용하면 조직에서 도움이 될 수 있습니다.

본질적으로 미세한 수준입니다.

또한 커밋하기 전에 로컬에서 조금 놀아 볼 수 있습니다. 놀이터 지점을 만들고 많은 커밋을 한 다음 최종 커밋 전에 다시 병합하는 것과 동일합니다. 모든 것보다 훨씬 가볍습니다.

0

SmartGit에서 마우스 오른쪽 버튼을 클릭하고 satge를 선택할 수 있습니다.

0

파일 (git 색인에 파일 추가)은 커밋을 위해 미세하게 준비하기 만하면됩니다. Git은 인덱스를 사용하여 마지막 커밋 이후에 변경 한 부분 만 커밋 할 수 있습니다. 하나는 끝났고 나머지 하나는 여전히 작업이 필요합니다. 커밋을하고 집으로 돌아가고 싶지만 (마침내 5시 방향!) 아직 완료되지 않은 두 번째 기능의 부분을 커밋하고 싶지는 않습니다. 알고있는 부분을 첫 번째 피쳐에 포함시키고 커밋합니다. 이제 커밋은 첫 번째 기능이 완료된 프로젝트이며, 두 번째 작업은 작업 디렉토리에서 여전히 진행 중입니다.