$ git init文件夹中生成.git版本库,包括stage(index),还有git自动建立的分支master,指向master分支的指针HEAD指针。javascript
拆分做业java
$ git add [file1] [file2] $ git add [dir1] [dir2] $ git add . $ git commit -m "a readme file"添加、提交一步到位git
$ git commit -am "once" $ git commit -a -m "once" $ git commit [file] [folder] -m ""
$ git add xxx $ git commit --amend 编辑工具会显示最近一次提交的提交message,能够修改 $ git commit --amend -m $ git commit --amend --no-edit (加入--no-edit参数,会修复提交但不修改提交信息)
a. 撤销工做区的修改,不影响缓存区shell
$ git checkout -- [file1] [file2] $ git checkout -- .b. 撤销缓存区的修改,将修改内容放回工做区,与工做区后期修改合并(clean 或者合并2处修改)缓存
$ git reset HEAD xxx(文件名) $ git reset HEAD .
$ git status $ git diff xxx 工做区和缓存区 $ git diff --cached/staged 已经暂存起来的文件和上次提交时的快照之间的差别 $ git diff HEAD -- xxx 工做区和版本库 注:修改并add一个版本,工做区再改回来,工做区与版本库无差异。有待add的文件, add 后无待commit的文件了$ git log 显示从最近到远的提交日志 $ git log --stat 显示commit历史,以及每次commit发生变动的文件 $ git log -p [files] 显示指定文件的每次commit的diff $ git log -p -2 经常使用 -p 选项展开显示每次提交的内容差别,用 -2 则仅显示最近的两次更新, 还有其余参数可选 $ git log -[number] --pretty --oneline 显示最近number次的log $ git log --pretty=oneline 漂亮地展现 $ git log --graph 分支合并图 $ git log --graph --pretty=oneline --abbrev-commit 分支合并状况
HEAD表示当前版本,即最新的提交,HEAD^上一个版本, HEAD^^, HEAD~100, clean。(--soft不会clean,modified)app
$ git reset --hard HEAD^ $ git reset --hard HEAD 等价于 clean掉工做区和缓存区 $ git reset --hard [commit_id] $ git reset [commit_id] (非clean,有待添加的文件)
当回退到某个版本x后,想回来,发现git log中,看不到x以后的commit记录(x+1)。此时,工具
a. 你的命令行还没关,你就能够顺着往上找,找到对应的commit id b. $ git reflog,找到对应的commit id$ git reset --hard 3628164
$ git stash $ git stash list 查看$ git stash apply stash内容并不删除 $ git stash pop 恢复的同时把stash内容也删了 $ git stash drop (.......)
$ git mv README.txt README其实,运行 git mv 就至关于运行了下面三条命令:命令行
$ mv README.txt README $ git rm README.txt $ git add README
a.从版本库中删除 $ git rm xxx / add commit b.误删了,恢复 $ git checkout -- xxx (撤销工做区修改)若是删除以前修改过而且已经放到暂存区域的话,则必需要用强制删除选项 -f(译注:即 force 的首字母),以防误删除文件后丢失修改的内容。
另一种状况是,咱们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然但愿保留在当前工做目录中。用 --cached 选项便可:指针$ git rm --cached readme.txt后面能够列出文件或者目录的名字,也可使用 glob 模式。比方说:日志
$ git rm log/\*.log注意到星号 * 以前的反斜杠 ,由于 Git 有它本身的文件模式扩展匹配方式,因此咱们不用 shell 来帮忙展开(译注:实际上不加反斜杠也能够运行,只不过按照 shell 扩展的话,仅仅删除指定目录下的文件而不会递归匹配。上面的例子原本就指定了目录,因此效果等同,但下面的例子就会用递归方式匹配,因此必须加反斜杠。)。此命令删除全部 log/ 目录下扩展名为 .log 的文件。相似的好比:
$ git rm \*~会递归删除当前目录及其子目录中全部 ~ 结尾的文件。