一.初识
git是分布式版本控制系统,有别于SVN的集中式管理。两者具体的分析比较可以参考github上的这篇gib与svn的差异比较。个人观点看,git指令丰富,功能完善,还拥有github这个大杀器,没有理由不选git.
二.git的文件状态与工作区域
I:三种状态:已提交(committed)、已修改(modified)和已暂存(staged)。你的文件可能就处于其中的一种状态。已提交表示数据已经安全的保存在本地数据库中。已修改表示修改了文件,但还没保存到数据库中。已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
II:Git 项目中的三个工作区域的概念:
Git 仓库(Repository):Git仓库是 Git 用来保存项目的元数据和对象数据库的地方。这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录(Working Directory):工作目录是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域(Staging Area):暂存区域 是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。
三.git指令整理
I:主体命令
1.git init 初始化操作。进入到本地想建仓库的目录, 执行此命令 ,之后便可看到 .git 这个文件夹(隐藏)
2.git add file 将文件添加到缓存
3.git status 查看状态详细信息 若加 -s 参数 则是简略显示
举例如:
$
git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
说明:新添加的未跟踪文件前面有 ??
标记,新添加到暂存区中的文件前面有 A
标记,修改过的文件前面有 M
标记。 你可能注意到了 M
有两个可以出现的位置,出现在右边的 M
表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M
表示该文件被修改了并放入了暂存区。 例如,上面的状态报告显示:README
文件在工作区被修改了但是还没有将修改后的文件放入暂存区,lib/simplegit.rb
文件被修改了并将修改后的文件放入了暂存区。 而 Rakefile
在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。
4.git rm -r filename 删除本地仓库文件 加 -n 参数 预删除文件,并不会真的删除磁盘上文件
5.git rm -f filename 强制删除 适用于文件在删除前做过修改并已提交到暂存区域的情况。但这样的话,删除的数据不能通过git再恢复
6.git rm --cached filename 只删除缓存区里的文件
拓展:git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。 比方说:
$ git rm log/\*.log
注意到星号 * 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。 此命令删除 log/ 目录下扩展名为 .log 的所有文件。 类似的比如:
$ git rm \*~
该命令为删除以 ~ 结尾的所有文件。
7.git mv 旧文件名 新文件名 实现对文件重命名
8.git fetch [alias] 更新本地数据文件,然后再执行 git merge [alias]/[branch] 将服务器上的任何更新合到本地的仓库中
9.git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别
具体参数应用:
尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat
10.git reset HEAD 命令用于取消已缓存的内容。
具体参数应用信息:
$ git reset --hard <commit ID> //将本地代码回退到指定的某次commit,目录和缓存区的修改都被丢弃
$ git reset --soft <commit ID> //将HEAD指向<commit ID>所在位置,本地的修改(即<commit ID>位置之前的修改)回退到缓存区
$ git reset --mixed <commit ID> //将HEAD指向<commit ID>所在位置,本地的修改(即<commit ID>位置之前的修改)回退到工作目录
hard/soft/mixed 是reset命令常用的三模式,默认是mixed。除此之外还有merge和keep两种模式,但是不大常用。
II:推送拉取相关
1.git remote 查看远端的仓库
2.git pull 远端仓库名 拉取远程数据仓库的数据 『合并了 git fetch 远程仓库 + git merge 远程仓库名 本地分支』
3.git remote add 远程仓库名 https://github.com/xxxx/远程仓库名.git 建立远程仓库
4.git push 远程仓库名 本地分支名 推送本地分支仓库数据到远程仓库同名分支下(git 会在远端仓库新建一个同名分支)
5.git commit -m "代码提交信息" 完成这步,对文件所做的改动便会提交到了 HEAD,但是还没到你的远端仓库。(需事先执行 git add操作)
6.git commit -a 可跳过git add 操作 , 直接将文件信息提交
7.git clone url 拷贝一个项目到本地
III.git日志操作
1.git log 查看消息日志
带有的选项含义:
--oneline 则消息以简短的形式体现
--reverse 逆向显示消息信息
--author 制定作者信息 如: git log --authou=kkk -5 显示 操作为kkk的前5行记录
--before 制定多少时间以前 如: git log --oneline --before={1.weeks.ago}
--after 相对应before 时间可为: weeks days hours minutes 或者直接敲数字 如: git log --oneline --after={2016-08-02}
--graph 开启拓扑图选项
IV:git的标签操作
1.git tag <name> 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
2.git tag -a <tagname> -m "blablabla..." 可以指定标签信息,或直接
git tag 标签名 但这样就缺少了相关详细的说明
3.git tag -s <tagname> -m "blablabla..." 可以用PGP签名标签;
4.git tag 可以查看所有标签。
5.git show tag <tagname> 查看标签信息
6.git push --tags 将本地所有tag一次推送到远程 注意默认情况下,git push 并不会把本地标签传到远程仓库上,需要通过命名制定上传
7.git push 远程仓库 tagname 将本地单个标签往远程仓库推
8.git fetch origin tag <tagname> 获取远程仓库的tag
9.git tag -d <tagname> 删除本地tag
10.git push origin --delete tag <tagname> 删除远程仓库的tag
11.git tag -a tagname 标签校验和 可实现对标签进行后期补打标签 校验和信息的获取方式命令: git log --pretty=oneline --abbrev-commit
×××标记即为历史提交对应的校验信息
V:git分支操作
1.git branch 查看分支
2.git branch -r 查看远程分支
3.git branch 分支名 本地创建分支
4.git checkout -b 分支名 本地创建分支,并自动切换到给分支
5.git checkout 分支名 切换到相应的分支
6.git branch -d 分支名 删除本地分支
7.git push 远程仓库名 --delete <远程仓库分支名> 删除远程仓库的分支
8.git branch -m devel develop 重命名本地分支 如: 将devel修改为 develop
9.git merge 要合的分支名 合并分支
附参考信息:
1.https://git-scm.com/book/zh/v2
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。