2011-11-29 3 views
1

브랜치 master 브랜치를 약간 변경 한 후 새 브랜치에서 작업하기로 결정했습니다. 나는 git checkout -b new_branch_name을했고 새로운 지점이 만들어지고 체크 아웃되었습니다. git status은 내가 변경 한 내용을 master에 표시했습니다.git에서 브랜치 생성에 대한 혼란

내 변경 사항이 이제 두 가지 (masternew_branch_name) 또는 단지 new_branch_name 일 경우 궁금합니다. 그래서 나는 master을 확인했고, 나의 변화가 거기에서도 있었다고 알아 차렸다. 그래서 나는 그 변화를 git checkout -- fileThatChanged으로 되돌 렸습니다. 변경 사항은 실제로 master에서 사라졌습니다.

불행히도 new_branch_name을 확인하고 git status을 실행하면 변경 사항이 해당 분기에서 되돌려 진 것으로 나타났습니다.

나는 무슨 일이 일어 났는지 이해하고 싶습니다. 어떻게 이것을 피할 수 있습니까?

하나의 해결책은 작업을 시작하기 전에 새 분기를 만들거나 체크 아웃하는 것입니다.

+1

기억해야 할 것은 분기가 커밋을 가리키고 커밋이 전체 작업 트리의 스냅 샷을 나타내는 것입니다. 체크 아웃 된 분기는 다음 커밋이 갈 단지 지점입니다. (작업 트리는 커밋과는 완전히 별개이며 인덱스는 두 인덱스 사이의 스테이징 영역입니다.) Git의 핵심 아이디어에 대해 말로 설명하려면 [The Git Parable] (http : // tom.preston-werner.com/2009/05/19/the-git-parable.html). – Cascabel

답변

5

변경 사항을 어느 분기에도 커밋하지 않았습니다. 그들은 단지에 -

# On branch master 
# 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: myfile.txt 
# 

변경 사항은 "MYFILE.TXT"가 "존재"어떤 지점에없는 수 :

$ git status 

과 같은 것을 보았다 : 당신이 이런 짓을하는 경우 즉, 귀하의 지역 업무 사본. 저장소에 저장하기 전까지 지점에 올라가지 않습니다.

이 시점에서 내가 입력한다면 : 이것은 내 변화를 말살 (그리고 마지막으로 내 현재 지점에 커밋처럼 보였다 무엇에 파일을 반환) 할

$ git checkout myfile.txt 

. 나는 새로운 분기에 이러한 변경 사항을 적용하고 싶다면

, 나는 이런 식으로 뭔가를 할 수 있습니다

$ git checkout -b new_branch_name 
$ git add myfile.txt 
$ git commit -m "made some changes" 
+0

새 분기를 생성/체크 아웃 한 직후에 새 분기의 변경 내용을 커밋하는 것과 같은 소리가 문제를 해결합니다. – SundayMonday

+2

그게 제가 마지막 예제에서 지적하고자했던 것입니다. – larsks

3

지수는 모든 지점 사이에 공유됩니다. 그것으로 로컬 작업 트리. 커밋 될 분기를 가정하지 않고 커밋 될 내용을 나타냅니다.
그러나 당신이 변화를 되돌릴 수를 의미, 그것은 상관없이 당신이 어떤 지점 복귀되지 않습니다

도 참조 (즉, 인덱스 또는 로컬 작업 공간에서 제거).

git file transition

+1

인덱스가 여기에 오지 않습니다. 파일들은'git add' 연산 후에 인덱스에서 끝납니다. 추가되거나 커밋되지 않은 파일에 대한 변경 사항은 색인에 없습니다. – larsks

+0

@larsks : 체크 아웃과 관련하여 귀하가 맞습니다 -F (작업중인 트리만 영향을받습니다). 하지만 내 대답을 편집하고 있었다. – VonC

1

수정 변경이 지점에 연결되어 있지만, 공통적으로되지 않습니다. 따라서 분기를 전환하면 변경 사항은 새 분기에 계속 남아 있습니다. 변경 사항을 실행 취소하면 분기를 전환 할 때 표시됩니다. 분기를 변경하기 전에 커밋하거나 숨겨 두어야합니다.

1

larsks가 말했듯이 이러한 변경 사항이 커밋되지 않았습니다.

작업 복사본을 기억하면서 지점을 전환하려는 경우 git stash을 사용해야합니다.

작업이 끝나면 git stash pop을 사용하여 in-process 작업 디렉토리를 복원 할 수 있습니다.