IT박스

Git을 사용하면 무단계 변경으로 분기 변경 가능

itboxs 2020. 12. 7. 07:58
반응형

Git을 사용하면 무단계 변경으로 분기 변경 가능


Git을 사용하면 커밋 (수정 된 파일)을 위해 준비되지 않은 변경 사항이있을 때 분기를 변경할 수 있습니다.

어딘가에 대한 구성이 있습니까?

편집 : 처음에는 이것이 수정되지 않은 파일이 수정 된 경우 분기 간 변경을 허용하지 않도록 설정해야하는 구성이라고 생각했습니다. 그러나 Emily의 의견에 따르면 파일이 브랜치마다 다르면 메시지가 표시되고 그렇지 않으면 메시지가 표시되지 않습니다.


결정 방법

간단한 실험은 다음을 보여줍니다.

당신이 지점에 dev있고 당신이 수정했다고 가정합니다 foo.txt. 커밋하지 않고 master. 두 가지 중 하나가 발생합니다.

  1. 커밋 이없는 커밋에서 foo.txt수정 된 경우 master에는 커밋 dev하지 않고 전환 할 수 없습니다 master. 스테이지되지 않은 변경 사항과 충돌하는 파일의 "새"버전이 있기 때문 입니다.

    master따라서 "체크 아웃" 하려면 Git foo.txt이있는 최신 버전 으로 업데이트해야하므로 준비되지 않은 master변경 사항이 삭제됩니다. 작업 손실을 방지하기 위해 분기를 변경하지 않습니다.

  2. 그렇지 않으면 버전이 master알고있는 "이후"수정이 완료되어 분기를 변경할 수 있습니다. Git은 파일 master에 대한 새로운 정보가 없기 때문에 파일을 업데이트 할 필요 가 없습니다.

"whoops"변경 사항

위의 이유로 한 브랜치의 파일에 단계가없는 변경 사항이 있고 실제로 다른 브랜치에서 변경 사항을 커밋하려는 경우 다른 브랜치를 체크 아웃 할 수도 있고 확인하지 못할 수도 있습니다.

그러나 다음을 수행 할 수 있습니다.

  • git stash save "here's a summary of my changes"(요약은에 표시됩니다 git stash list)
  • git checkout otherbranch
  • git stash pop( git stash apply의 조합 git stash drop)

Emily가 지적했듯이 이것은 기능입니다. Git은 변경을 수행 할 때 단계 화되지 않은 변경 사항이있는 파일을 수정해야하는 경우에만 분기 변경을 허용하지 않습니다. 수정 된 모든 파일이 브랜치 체크 아웃에 의해 변경되지 않으면 git은 전혀 불평하지 않습니다. 즉, 어떤 브랜치를 체크 아웃하든 상관없이 항상 이전 브랜치를 체크 아웃 할 수 있으며 작업 트리는 이전 브랜치를 떠난 방법과 동일합니다.

참고 URL : https://stackoverflow.com/questions/8526279/git-allows-for-branch-change-with-unstaged-changes

반응형