git-本地文件命令

1. 初始化本地库
$ git init

文件夹中生成.git版本库,包括stage(index),还有git自动创建的分支master,指向master分支的指针HEAD指针。

2. 工作区→缓存区→版本库 (工作区:电脑中可以看到的目录)

拆分作业

$ git add [file1] [file2] 
$ git add [dir1] [dir2]
$ git add .
$ git commit -m "a readme file"

添加、提交一步到位

$ git commit -am "once"
$ git commit -a -m "once"
$ git commit [file] [folder] -m ""
3. 提交时,漏掉了某文件
$ git add xxx
$ git commit --amend 编辑工具会显示最近一次提交的提交message,可以修改
$ git commit --amend -m 
$ git commit --amend --no-edit (加入--no-edit参数,会修复提交但不修改提交信息)
4. 撤销修改

a. 撤销工作区的修改,不影响缓存区

$ git checkout -- [file1] [file2]
$ git checkout -- . 

b. 撤销缓存区的修改,将修改内容放回工作区,与工作区后期修改合并(clean 或者合并2处修改)

$ git reset HEAD xxx(文件名)
$ git reset HEAD .
5. 查看
$ 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        分支合并情况
6.回退版本

HEAD表示当前版本,即最新的提交,HEAD^上一个版本, HEAD^^, HEAD~100, clean。(–soft不会clean,modified)

$ git reset --hard HEAD^
$ git reset --hard HEAD            等价于 clean掉工作区和缓存区
$ git reset --hard [commit_id]
$ git reset [commit_id] (非clean,有待添加的文件)
7.回到未来版本

当回退到某个版本x后,想回来,发现git log中,看不到x之后的commit记录(x+1)。此时,

a. 你的命令行还没关,你就可以顺着往上找,找到对应的commit id
b. $ git reflog,找到对应的commit id
$ git reset --hard 3628164
8.“储藏”和“恢复”工作现场
$ git stash
$ git stash list 查看
$ git stash apply    stash内容并不删除
$ git stash pop        恢复的同时把stash内容也删了
$ git stash drop  (.......)
9.文件重命名
$ git mv README.txt README

其实,运行 git mv 就相当于运行了下面三条命令:

$ mv README.txt README
$ git rm README.txt
$ git add README
10.删除文件,手动删除之后,2个选择:
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 \*~

会递归删除当前目录及其子目录中所有 ~ 结尾的文件。

    原文作者:mayihetu
    原文地址: https://segmentfault.com/a/1190000013781174
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞