对git中分支创建的困惑

Sun*_*day 1 git version-control git-checkout git-branch

在对分支进行一些更改后,master我决定从一个新的分支工作.我做git checkout -b new_branch_name了,创建了一个新的分支并检查出来.git status显示了我所做的改变master.

我很好奇,如果我的更改现在在两个分支(masternew_branch_name)或只是new_branch_name.所以我检查了一下master,注意到我的变化也在那里.所以我用这些改变了git checkout -- fileThatChanged.这些变化确实已经消失了master.

不幸的是,检查new_branch_name和运行git status显示我的更改也从该分支还原.

我想了解发生了什么,以后如何避免这种情况.

一种解决方案是在开始工作之前创建/签出新分支.

lar*_*sks 5

您从未将更改提交到任一分支.也就是说,如果你这样做:

$ git status
Run Code Online (Sandbox Code Playgroud)

并看到这样的事情:

# 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
#
Run Code Online (Sandbox Code Playgroud)

对"myfile.txt"的更改在任何分支上都不"存在" - 它们仅在您的本地工作副本中.在将它们安装到存储库之前,它们不会最终出现在分支上.

如果此时我输入:

$ git checkout myfile.txt
Run Code Online (Sandbox Code Playgroud)

这将删除我的更改(并将文件返回到我当前分支的最后一次提交中的任何内容).

如果我想在新分支上提交这些更改,我可能会这样做:

$ git checkout -b new_branch_name
$ git add myfile.txt
$ git commit -m "made some changes"
Run Code Online (Sandbox Code Playgroud)

  • 这主要是我在最后一个例子中要表明的. (2认同)