일부 파일 만 커밋하려면 어떻게해야합니까?


259

두 가지 프로젝트가 있습니다. 하나는 "공식적인"프로젝트이고 두 번째는 간단한 수정입니다 (일부 파일 추가). 새 지점을 만들고 새 파일을 추가했습니다. 그러나 개발 중에 두 가지에 공통적 인 일부 파일이 변경되었습니다.

이 파일 만 어떻게 커밋합니까?


이 두 프로젝트가 동일한 자식 저장소에 연결되어 있습니까?
Oleksandr

예, 동일한 저장소이지만 지점을 서버에 배치하고 싶지 않습니다.
Nips

새 지점을 마스터 (또는 다른 공식 지점)에 병합하지 않겠습니까
Oleksandr

1
이러한 질문에 대한 답변이 도움이 될 것입니다. stackoverflow.com/questions/7161860/… stackoverflow.com/questions/7175869/…
eckes

답변:


261

한 지점에 대한 변경 사항을 커밋 한 다음 다른 지점에 변경 사항을 표시하려고한다고 가정합니다. git에서는 분기를 변경할 때 HEAD 위에 변경 사항이 없어야합니다.

다음을 통해 변경된 파일 만 커밋합니다.

git commit [some files]

또는 스테이징 영역이 깨끗하다고 ​​확신 할 수있는 경우

git add [some files]       # add [some files] to staging area
git add [some more files]  # add [some more files] to staging area
git commit                 # commit [some files] and [some more files]

커밋을 두 지점에서 모두 사용하려면

git stash                     # remove all changes from HEAD and save them somewhere else
git checkout <other-project>  # change branches
git cherry-pick <commit-id>   # pick a commit from ANY branch and apply it to the current
git checkout <first-project>  # change to the other branch
git stash pop                 # restore all changes again

22
다른 변경이 준비된 경우에도 해당 파일 문자 그대로 커밋하려면 두 번째 예 ( 스위치 git commit [some files]를 의미 함 --only)를 사용해야합니다. (첫 번째 예 git add [some files]다음은 git commit)도 있었다 다른 변경은 단계적 커밋한다.
Lexikos

4
git commit [일부 파일]에 대한 예제를 제공하는 것이 도움이 될 것입니다. [일부 파일], 쉼표, 공백을 어떻게 바꿔야합니까?
Claudiu Creanga

2
@claudiu는 일반적으로 셸 항목은 공백으로 구분됩니다. 그리고 당신이 충분히 깊게 다이빙한다면 당신은 그것을 무엇이든 바꿀 수 있습니다
Alex

몇 가지 예를 추가 할 수 있다면이 답변이 훌륭 할 것입니다.
Yamur

154

커밋하려는 파일 목록을 가져옵니다.

$ git status

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   file1
modified:   file2
modified:   file3
modified:   file4

준비에 파일 추가

$ git add file1 file2

무엇을하고 있는지 확인하십시오

$ git status

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   file1
    modified:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   file3
    modified:   file4

커밋 메시지로 파일 커밋

$ git commit -m "Fixed files 1 and 2"

실수로 잘못된 파일을 커밋 한 경우

$ git reset --soft HEAD~1

파일을 스테이지 해제하고 다시 시작하려면

$ git reset

Unstaged changes after reset:
M file1
M file2
M file3
M file4


30

이 중 일부는 "불완전한"것 같습니다

사람들의 그룹은 따옴표 등을 사용해야하는지 알 수 없습니다.

위치 경로를 보여주는 특정 파일 1 개 추가

git add JobManager/Controllers/APIs/ProfileApiController.cs

커밋 (커밋은 로컬 전용이며 다른 시스템에는 영향을 미치지 않음)

git commit -m "your message"  

원격 저장소로 푸시

git push  (this is after the commit and this attempts to Merge INTO the remote location you have instructed it to merge into)

다른 답변 은 때때로 당신이하고 싶을 숨길 등을 보여줍니다


11

파일을 이미 준비한 경우에는 파일을 준비 해제하십시오.

git reset HEAD [file-name-A.ext] [file-name-B.ext]

그런 다음 조금씩 다시 추가하십시오.


11

다음과 같이 여러 파일을 변경했다고 가정하십시오.

  • 파일 1
  • 파일 2
  • 파일 3
  • 파일 4
  • 파일 5

그러나 File1 및 File3의 변경 사항 만 커밋하려고합니다.

이를 수행하는 두 가지 방법이 있습니다.

1. 다음을 사용하여이 두 파일 만 준비하십시오.

git add file1 file2

그런 다음 커밋

git commit -m "your message"

그런 다음

git push

2. 직접 커밋

git commit file1 file3 -m "my message"

그런 다음

git push

실제로 첫 번째 방법은 파일을 정기적으로 수정하고 준비하는 경우-> 대규모 프로젝트, 일반적으로 라이브 프로젝트 인 경우에 유용 합니다.
그러나 파일을 수정하고 준비하지 않으면 직접 커밋-> 소규모 프로젝트를 수행 할 수 있습니다


두 번째 예제에서 알 수 있듯이 파일 이름을 지정하지 않으면 git은 이러한 인수에 대한 명령 플래그를로 가정합니다 --only. 그런 다음 참조 와 동일한 명령 git commit --only file1 --only file3 -m "my message"이거나 바로 가기를 사용합니다 git commit -o file1 -o file3 -m "my message". git-scm.com/docs/git-commit
사용자

0

코드를 많이 변경하지 않으면 간단한 방법입니다.

1. git stash
2. git stash apply
3. remove the files/code you don't want to commit
4. commit the remaining files/code you do want

그런 다음 별도의 커밋 또는 다른 브랜치에서 제거 한 코드 (커밋하지 않은 비트)를 원하면이 브랜치에서 여전히 수행하십시오.

5. git stash apply
6. git stash

5 단계에서 이미 숨김을 적용하고 4 단계에서 원하는 코드를 커밋 한 경우 새로 적용된 숨김에서 diff 및 untracked는 4 단계에서 커밋하기 전에 3 단계에서 제거한 코드입니다.

6 단계는 커밋하지 않은 코드를 숨겨둔 것이므로 변경 사항을 제대로 잃고 싶지 않을 것입니다. 따라서 올바른 분기에서 git stash apply를 적용하고 커밋하여 6 단계의 새 숨김을이 분기 또는 다른 분기에 커밋 할 수 있습니다.

분명히 이것은 하나의 플로우에서 단계를 수행한다고 가정합니다.이 단계의 다른 지점에서 숨김을 설정하면 기본 숨김 이외의 최신 단계를 적용하는 대신 위의 각 단계에 대한 숨김 참조를 기록해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.