工作中用到过的git命令整理
git是我们平时最常用的版本控制工具。相比于svn,git有如下几大优势:(1)git是分布式管理,不需要单独的服务器存储代码,团队中的每一台机器都可以作为服务器,都相互独立。其最大的优点就是,在断网的情况下,仍然可以正常地使用git来管理本地的提交等版本管理操作。待网络恢复以后,只需要把所有的提交push到远程Git服务器即可。(2)切换分支速度非常快,几乎是瞬间完成,对分支的管理方面效率比svn更高,svn的分支切换太慢,导致该功能形同虚设。
该篇文章中,记录了平时使用时常用的命令,其中绝大部分都是平时自己用过的命令。在学习和使用工具时,主要参考了如下两个网站:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
https://git-scm.com/book/zh/v2
(一)相关配置
1.查看git配置信息 $ git config --list
2.修改配置信息(平时使用时,只修改过user.name和user.email)
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
3. $ git init 把当前目录变成Git仓库
(二)本地Git操作
1.$ git status 查看新修改文件状态
2.$ git checkout filename 还原修改的文件(根据自己演示的结果,得到的结论)
(1)当unstage区(即只修改但未add时)中有,而stage区中没有该filename文件时,该命令使filename文件还原为最新一次commit中的文件
(2)当unstage区中有,stage区中也有时,执行该命令后,unstage区文件还原为stage中的内容
(3)当unstage区中没有,stage区中有时,执行该命令后,stage区文件不变,此时需要使用$ git reset HEAD filename还原(后续会讲到该命令)
3.$ git add 将工作区中新修改文件添加到stage区
filename 将指定文件添加到stage区
dir 将某个文件夹添加到stage区
. 在Git Version2.x中将当前文件夹下所有有改动(修改的,删除的,新创建的文件)的文件加入到 stage区。在Git Version1.x中只将新修改的和新创建的文件添加到stage区。
-u (update)将所有tracked文件添加到stage区中,从测试情况来看,删除的文件和新修改的文件都是tracked,新创建的文件是untracked文件,用git status可以查看(简单点说,就是将删除的,新修改的文件添加到stage区)。
-A (all) 将所有change(修改的,删除的,新创建的文件)都提交到stage区
--ignore-removal 新创建的文件和新修改的文件,被添加到stage区。忽略掉被删除的文件。和Git Version1.x中 git add . 功能一样。
-h 显示帮助信息
4.$ git reset HEAD可以将stage中的change还原到unstage区(即add前的状态)中,详细的可以参考第6点。
5.$ git commit
-a (--all) 将被track的文件,提交。包括没有被add的文件。
-m (--message) "message" 将stage区域的文件添加到当前分支中,并带有log
--amend 将弹出一个编辑页面,编辑修改上一次commit的内容。
-C(--reuse-message) <commit> 使用和commit-id相同的提交信息(可以用于补充提交内容)
--reset-author 重新设置作者。
6.$ git reset 将仓库提交指针指向某个版本(可能是前进,也可能是回退)
--soft 指针移动后,当前change仍不变。
--hard 指针移动后,当前change被还原为未修改状态。
没有hard/soft时,stage区中的change还原到unstage区。
commit-id,HEAD指针指向到commit-id的提交点版本。
HEAD 表示当前版本 HEAD^表示上一个版本,多个^可以共同使用,读者可以自行查询。
7.$ git diff
file 添加文件名,针对某个文件进行比较。
无参数 (1) 如果stage区有,则是工作区和stage去做比较
(2) 如果stage区没有,则是工作区和分支中做比较
HEAD 比较工作区和HEAD指针指向的版本库中文件做比较
--cache 暂存区和分支做比较。
8.$ git rm
9.$ git stash 隐藏所有tacked(modified和deleted)的change,stash就是隐藏的意思。无论是unstage区还是stage区的,都可以被stash隐藏保存起来。