本节内容包括了Git的基本命令操作,为最常用的操作,简单记录。
一、获取Git仓库
建立Git的项目无外乎两种,一种是从远端clone下来,一种是将已有项目导入。
1.在现有目录中初始化Git仓库:
git init: 初始化仓库,在项目目录中执行该命令,会生成一个.git子目录(windwos下可能被隐藏了),该目录就包含了git仓库的所有必须文件。
2.git add: 对已有的文件进行跟踪;只有对文件跟踪后才能进行提交;作用:跟踪新文件和暂存文件(已经commit的文件修改后执行该命令进行暂存)
eg: git add *.c
4.git commit: 提交变更。对已经git add(跟踪)的文件进行提交,并且需要提交注释。
直接输入git commit会跳出编辑器来输入信息,简单的方式是使用git commit -m "内容"
eg: git commit -m "这是我第一次提交内容"
git commit -v:会把提交的差异显示在编辑器
跳过暂存区进行提交:我们每次都是git add之后再能进行git commit,这似乎有一点点繁琐,我们可以简化这个过程。
git commit -a -m "提交内容" :只适用已经提交的内容的修改
5.git clone: 克隆仓库。相当于svn的checkout命令,将远端仓库的的文件全部拉取下来。命令行是没有checkout这个命令的,但是在使用idea的时候,第一次克隆下来的时候也是用点击checkout。
eg: git clone url 本地名
其中url可以是https或者ssh,本地名就是将远程仓库克隆下来后在本地的名字
6.记录变更说明:
工作目录下所有的文件都处于两种状态:已跟踪(tracked)和未跟踪(untracked)(我理解的是git add和git commit的文件都是已经跟踪了的,而最基础的git add都没有执行的文件是未跟踪的)。已跟踪指上一次快照中包含的文件。已跟踪又分为三种状态:未修改、已修改和已暂存。
当刚clone之后,所有的文件都是已跟踪未修改的。
7.git status:查看当前文件的状态,也可以查看到当前属于什么分支。但是git status的信息比较全面也比较冗长,当需要简洁的查看时候。
使用git status -s(git status -short的简写)
使用git status -s在文件的最见面会有个标记,标记的说明如下:
??:未被跟踪的文件
M:已经修改的文件(modified)没有暂存
MM:已修改并被添加到暂存区,之后又被修改过(暂存区和工作区都有)
A:已经暂存
8.忽略文件
创建.gitignore文件,不想提交的均可放入到其中。规则如下:
空行或者#开头的会被忽略
支持标准的glob模式
以斜杠(/)开头的可以禁止递归匹配
以斜杠(/)结尾的标识目录
以感叹号(!)开头的表取反
glob是适用shell的简化版正则(linux学习很重要而且成为较为厉害的程序员必学),比如星号()匹配零个或多个字符,问号(?)匹配一个字符,[abc]配置其中的任意一个,[0-9]范围内的任何一个,*表示嵌套目录
eg:
*.a : .a类型都被忽略
build/: build目录下都被忽略
更多的参考可以查看:https://github.com/github/gitignore
9.git diff: 查看已暂存和未暂存的变更(查看变更的详情,输出的是补丁)
查看尚未添加到暂存区的变更(没有git add),直接输入git diff
查看哪些已暂存的内容会下一次提交: git diff --staged
再强调,git diff只是显示还没有进入暂存区的变更,所以你添加到暂存区之后输入git diff是没有任何提示的
已经暂存的除了git diff --staged 之外,还可以使用git diff --cached来查看
还有其他的git diff命令,同时有很多git diff的工具,可以通过git difftool来使用.git difftool --tool-help
10.移除文件
git rm 文件名
如果要从git里面移除文件,需要从跟踪列表移除(从暂存区移除),再提交
已经暂存了,那需要使用命令:
git rm -f 文件
将文件留在硬盘上,只是不想跟踪
git rm --cached 文件
11.移动文件
git mv file_form file_to
12.git log: 查看提交历史
执行git log 可以查看到提交历史,按照时间列出
最有用的选项 -p:会显示出每次提交所引入的差异
git log -p -2: 查看最近两次提交
git log --stat :查看每个提交的简要统计信息
--pretty命令选项,后面可加=online/short/full/fuller
或者=format: "%h -%an,%ar:%s"
format参数如下:
%H:提交对象的散列值
%h:提交对象的简短散列值
%T:树对象的散列值 %t:简短
%P:父对象散列值; %p:简短
%an:作者名字;
%ae:作者邮箱
%ad:创作日期
%ar:相对于当前日期的创作日期
%cn:提交者名字
%ce:提交者的邮箱
%cd:提交日期
%s:提交信息的主题
online与format可以配合 --graph来使用,图形化。
gti log常用的项:
-p: 按不听显示每次提交引入的更改
--stat: 显示每个提交中被更改的文件的统计信息
--shortstat:
--name-only: 每个提交信息后显示被更改的文件列表
--name-status:上个命令基础上显示“已更该/新增/删除”统计信息
--abbrev-commit:只显示SHA-1的前几个字符
--relative-date:显示相对日期
--graph:图形化
--pretty
13.限制提交历史的输出范围
git log -n:最近多少次
--since/--after:某天之后
--until/--before:指定日期之前
--author:作者
--committer:提交者
--grep: 关键字
-s:只输出包含添加/输出指定字符串的提交。
要查看author和grep,要添加--all-match
14.撤销已提交:
git commit --amend
15.撤销已暂存:
git reset HEAD 文件名:移出暂存区
16:撤销对文件的修改(危险的命令)
git checkout --[filename]
会将之前的修改撤销,恢复的之前的文件
17.远程仓库的使用
1).git remote:显示远程仓库简称,默认源仓库叫做:origin
2).git remote -v :显示每个仓库的地址
3).添加远程仓库: git remote 短名 地址
4).git fetch与git pull
git fetch会将远程仓库新增的数据拉取到本地仓库,但是不会合并。需要自己手动合并
git pull:会将远程仓库拉取下来,并尝试自动合并
5)gti push: 数据推送到远程仓库:
在推送下,先gti pull,不然会被拒绝推送.
git push 仓库短名 分支名
eg: git push origin master
第一次应该使用:git push -u origin master:设置一个默认的仓库
6).查看仓库信息
git remote show 仓库名
18.重命名与删除远程仓库
重命名:git remote rename 原名 新名
删除:git remote rm 仓库名
19.标记
git tag:列举标记 git tag -l
创建注释标签: git tag -a v1.2 -m "我的标签"
显示:git show v1.2
创建轻量标签:git tag v1.4 -lw
补加标签:git tag -a v1.2 ee
共享标签:git push origin [tagname]
一次提交多个: git push origin --tags
检出标签:
git checkout -b [分支名] [标签名]
20.git别名
git config alias.别名 '原名'
网友评论