git add 실행 여부에 관계없이 분기 (수정, 추가, 삭제 된 파일)를 전환 할 때 git이 계속 변경 사항을 표시하는 이유는 무엇입니까?


115

나는 git을 처음 접했고 git checkout을 실행하여 분기간에 전환 할 때 git이 다른 분기의 한 분기에서 변경 한 내용을 계속 표시하는 이유를 이해하려고 노력했습니다. 먼저 git add를 사용하지 않았는데 작동하지 않았습니다. 그러나 나는 git add를 사용해 보았지만 문제를 해결하지 못했습니다. 아직 git commit을 사용하고 있지 않습니다.

이것은 기본적으로 내가하는 일입니다.

$ git clone <a_repository>  
$ git branch  
* master  
$ git branch testing  
$ git checkout testing  
...edit a file, add a new one, delete...  
$ git status  
    # On branch testing  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  
$ git branch  
  master  
* testing  
$ git checkout master  
D       file1.txt  
Switched to branch 'master'  
$ git status  
    # On branch master  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  

브랜치를 사용하는 동안 한 브랜치에서 무엇을하든 다른 브랜치에서는 보이지 않는다고 생각했습니다. 그것이 지점을 만드는 이유가 아닙니까?

"git add"를 사용해 보았지만 변경 사항은 두 가지 모두에서 볼 수 있습니다. 이것을 피하기 위해 분기간에 전환하기 전에 "git commit"을 실행해야합니까?

답변:


142

분기 전환은 커밋되지 않은 변경 사항을 전달합니다. 먼저 커밋 git checkout .하거나 실행 취소하여 실행하거나 git stash전환하기 전에 실행하십시오 . (을 사용하여 변경 사항을 다시 가져올 수 있습니다. git stash apply)


10
git stash pop은 거대한 스택을 쌓고 싶지 않다면 더 좋습니다.
siride 2011

7
@JPZ : git stash는 추적 된 파일 만 처리합니다. 새 파일은 추적되지 않으므로 숨겨지지 않습니다.
siride 2011

2
@JPZ : 추적되지 않은 파일을 숨기려면 보관 git add하기 전에해야합니다. 즉, 실제로 여기에 숨길 것인지 확실하지 않습니다. 변경 사항이 전환하려는 분기의 일부가되도록하려면 커밋하십시오. (해당 브랜치로 다시 전환하고 변경 사항을 커밋하기 전에 더 작업하려는 경우 작업에 stash적합한 도구가 될 수 있습니다.)
Cascabel 2011

16
"분기 전환은 커밋되지 않은 변경 사항을 전달합니다."-이것은 말이되고 아마도 최악의 디자인 아이디어 일 것입니다. 격리 된 방식으로 작업 할 수없는 경우 분기를 갖는 이유는 무엇입니까? !!!
nehem

1
제 경우에는 개발 분기에서 하나의 기능 분기가 있습니다. 기능 브랜치에서 커밋했지만 개발 브랜치를 체크 아웃 할 때도 변경 사항이 표시됩니다.
Hitesh Garg를

31

짧은 대답 : 네, 커밋해야합니다. 그래도 올바른 지점에서 수행해야합니다!

분기는 커밋에 대한 포인터입니다. 체크 아웃 된 브랜치로 커밋하면 브랜치가 새로운 커밋을 가리 키도록 진행됩니다. 브랜치를 체크 아웃하면 가리키는 커밋을 체크 아웃하는 것입니다. (커밋을 작업 트리의 스냅 샷으로 생각할 수 있습니다.)

따라서 커밋하지 않은 변경 사항이 있으면 분기를 전환해도 영향을받지 않습니다. 물론 분기 전환이 변경 사항과 호환되지 git checkout않으면 단순히 거부합니다.

git add스테이징 변경을위한 명령이며 커밋합니다. 이러한 변경 사항은 저장소 기록에 기록되지 않습니다. 단순히 스테이징 영역 (색인)에 배치합니다. git commit그런 다음 해당 스테이징 영역의 내용을 사용하여 커밋을 만듭니다.

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