我对使用 Git 还比较陌生。这是我到目前为止所做的:
$ git branch
* master
$ git status
# On branch master
nothing to commit (working directory clean)
$ git branch mywork
$ git checkout mywork
$ git branch
* mywork
master
...modify some files...
$ git status
# On branch mywork
# 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: file1.html
# modified: file2.html
#
no changes added to commit (use "git add" and/or "git commit -a")
现在,如果我切换到另一个分支,我希望我的更改保留在这个分支内。然而,看起来这些变化是伴随着我而来的:
$ git checkout master
M file1.html
M file2.html
Switched to branch '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: file1.html
# modified: file2.html
#
no changes added to commit (use "git add" and/or "git commit -a")
难道我做错了什么?还是我误解了 Git 的使用?
您的工作目录和存储库是彼此分离的,从某种意义上说,工作目录中的代码在提交之前不会与分支关联。
为了进一步搅浑水,git 引入了一个称为索引的新概念,它是一个集结地在你的工作目录和存储库之间。当你跑步时git add
在文件上,你是什么really所做的就是将其添加到索引中。同样,当你跑步时git commit
,您最终将索引的内容添加到存储库中。
git status
索引和工作目录之间的区别如下。
-
Changes to be committed:
表示指数的变化
-
Changed but not updated:
指示工作目录中对已添加到存储库的文件的更改(并且随后不会被忽略)
-
Untracked files:
表示工作目录中的文件发生了更改not已经添加到存储库中
如果您想暂时保存一些更改,但不保证其自己的分支,请使用git stash http://www.kernel.org/pub/software/scm/git/docs/git-stash.html。这是 git 用于创建极其轻量级、单提交分支的机制。来自man page http://www.kernel.org/pub/software/scm/git/docs/git-stash.html(重点是我的):
Use git stash
当你想录音的时候
目前的状态工作的
目录和索引,但想要
返回到一个干净的工作目录。
该命令保存您的本地
修改消失并恢复
工作目录来匹配HEAD
犯罪。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)