灰色箭头不参与git快照。
- 默认git有4种状态
- untracked 未跟踪
- unmodified 未修改
- modified 修改
- staged 暂存区
其中我们工作区中只有 未修改 和修改。
初始化,和commit后 所有为跟踪的文件都是 未修改的。
运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来:
git diff –cached 查看已经暂存起来的变化:
git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交
如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “Changes not staged for commit” 部分(也就是未暂存清单)看到:
|
|
no changes added to commit (use “git add” and/or “git commit -a”)
然后再运行 git rm 记录此次移除文件的操作:
|
|
另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 .a 编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 –cached 选项即可:
$ git rm --cached readme.txt
后面可以列出文件或者目录的名字,也可以使用 glob 模式。比方说:
$ git rm log/\*.log
注意到星号 * 之前的反斜杠 \,因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开(译注:实际上不加反斜杠也可以运行,只不过按照 shell 扩展的话,仅仅删除指定目录下的文件而不会递归匹配。上面的例子本来就指定了目录,所以效果等同,但下面的例子就会用递归方式匹配,所以必须加反斜杠。)。此命令删除所有 log/ 目录下扩展名为 .log 的文件。类似的比如:
$ git rm \*~
会递归删除当前目录及其子目录中所有 ~ 结尾的文件。
图形化显示分支
git log –pretty=format:”%h %s” –graph
|
|
提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 –amend 提交:
取消对文件的修改
$ git checkout – benchmarks.rb
添加远程仓库
git remote add [shortname] [url]
从远程仓库抓取数据
$ git fetch [remote-name]
默认情况下 git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。所以一般我们运行 git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。