git checkout의 동작에 대해 혼동스러워합니다. documentation of git checkout는 말한다 :git checkout에 대한 혼란
--merge
것은, 가지를 전환 할 때 하나의 로컬 수정하거나 전환하는 에 현재의 지점과 지점 사이의 다른 이상의 파일이있는 경우 명령 은 컨텍스트에서 수정 사항을 보존하기 위해 에 분기를 전환하는 것을 거부합니다. 그러나이 옵션을 사용하면 브랜치, 작업 트리 내용, 사이의 3 방향 병합과 새 분기가 완료되고 이 새 분기에 있습니다.
그러나 나는 굵은 글씨로 설명한대로 동작하지 않는 작은 테스트를 수행했습니다. 즉 : 나는
- .
- "testbranch"다른 분기를 만듭니다.
- master의 파일 내용을 변경하십시오. 그러나 저 지르지 않았다.
- "testbranch"로 전환되었습니다.
- 이제 마스터 브랜치에서 변경된 커밋되지 않은 변경 사항이 testbranch!
로컬 변경 사항이 있고 지점으로 전환하고 싶다면 실패하지 않았습니까?
이[email protected] e:/test/merge_test
$ git init
Initialized empty Git repository in E:/test/merge_test/.git/
[email protected] e:/test/merge_test (master)
$ mkdir src
[email protected] e:/test/merge_test (master)
$ echo "Hello World" > src/a.txt
[email protected] e:/test/merge_test (master)
$ cat src/a.txt
Hello World
[email protected] e:/test/merge_test (master)
$ git add src
[email protected] e:/test/merge_test (master)
$ git commit -m "say hello"
[master (root-commit) 939f6e0] say hello
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 src/a.txt
[email protected] e:/test/merge_test (master)
$ git branch testbranch
[email protected] e:/test/merge_test (master)
$ echo "Changed content" > src/a.txt
[email protected] e:/test/merge_test (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: src/a.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[email protected] e:/test/merge_test (master)
$ git checkout testbranch
M src/a.txt
Switched to branch 'testbranch'
[email protected] e:/test/merge_test (testbranch)
$ cat src/a.txt
Changed content
사람이 설명 할 수 : 아래
는 명령 목록이이 문제를 재현하는 것입니다? 새 분기를 체크 아웃 할 때 그래서의 새로운 지점에 따라 그것으로 이동 얻을[email protected]YA-PC e:/test/merge_test (testbranch)
$ git --version
git version 1.7.0.2.msysgit.0
정확하게'git checkout testbranch'가 다음과 비슷한 오류로 실패 할 것이라고 생각한 이유입니다. testbranch로 전환 할 수 없습니다. 덮어 쓸 로컬 변경 사항이 감지되었습니다. 설명서에서도 그렇습니다. – Sabya
@Sabya : 현재 변경된 지점과 전환하려는 지점간에 다른 파일에서 로컬 변경 사항이 감지되는 경우에만 실패합니다. 귀하의 경우'src/a.txt'의 커밋 된 버전은'master' 브랜치와'testbranch' 브랜치에 텍스트 "Hello World"를 포함하고 있습니다. 그것은 동일한 내용이므로, git은 전환에 문제가 없습니다. –
@Sabya : 변경 사항이 "준비"되었으므로 git add. 또는 비슷한 것을 의미하는 경우 분기 변경을 허용하지 않습니다. –