Git命令和基础知识
1、Git仓库创建
本地创建
$ git init ///创建初始化仓库。
///初始化提交
$ git add *.java 提交问题
$ git add LICENSE
$ git commit -m 'initial project version'
或者远处clone
$ git clone <URL>(仓库地址)或 git clone<URL>(仓库地址)<name>(文件名)
2、记录更新仓库
文件存在四种状态,untracked(未跟踪), unmodified(未更改),modified(更改), staged(已暂存)。
$ git status ///查看文件状态
$ git status -s 或 git status —short ///查看状态更简洁。
忽略文件(不需要git管理的文件)
$ cat .gitignore
*.[oa]
*~
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。 第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。
文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
查看已暂存和未暂存的修改
$ git diff /// 比较的是工作目录中当前文件和暂存区域快照之间的差异
$ git diff -cache /// 查看已暂存的将要添加到下次提交里的内容
提交更新
$ git commit ///每次准备提交前,先用 git status 看下,是不是都已暂存起来了
$ git commit -m “commit message” ///可以添加提交记录
$ git commit -a ///将所有已跟踪的文件暂存起来,已暂存后提交,跳过了git add步骤。
移除文件
$ git rm <name> ///从暂存区域移除文件,并从工作目录删除文件, 下一次提交时,该文件不再纳入版本管理。如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f,即: git rm -f <name>
$ git rm —cache <name> ///只是移除git控制,但工作目录不删除。
$ git rm log/*.log /// git rm 命令后面可以列出文件或者目录的名字, 此命令删除 log/ 目录下扩展名为 .log 的所有文件
$ git rm *~ ///该命令为删除以 ~ 结尾的所有文件。
移动文件
$ git mv <name1> <name2> ///重命名文件
3、查看提交历史
git log ///查看提交历史记录
git log -p -2 /// -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交
git log —stat /// 查看每次提交的简略的统计信息
git log —pretty ///简洁的查看提交历史记录
git log —pretty=format:"%h - %an, %ar : %s" ///显示的记录格式
///下面是各命令代表的含义
-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
-(n) 仅显示最近的 n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
--grep 仅显示含指定关键字的提交
-S 仅显示添加或移除了某个关键字的提交
4、撤销操作
$ git commit —amend ///将暂存区的文件重新提交
如果你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最终你只会有一个提交——第二次提交将代替第一次提交的结果。
$ git reset HEAD <name> /// 取消已暂存的文件。
$ git checkout — <name> ///撤销之前文件的修改,返回到上一次提交状态,慎用,撤销后不可再恢复。
5、远程仓库的使用
查看远程仓库
$ git remote /// 显示仓库服务器的名字
$ git remote -v ///显示仓库服务器的名字 和URL
添加远程仓库
$git remote add <shortname> <URL> /// 添加远程仓库,指定仓库服务器名
从远程仓库中抓取和拉取
$ git fetch [remote-name] ///从远程仓库中获取你还没有的数据,执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。git fetch origin 会抓取clone(或上一次抓取)后新推送的所有工作, 必须注意 git fetch 命令会将数据拉取到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
$ git pull [remote-name] ///从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
$ git push [orgiin] [master] ///master 分支推送到 origin 服务器, 必须先拉取,合并,再push,以免冲突。
查看某个远程仓库
$ git remote show [remote-name] /// 查看远程仓库的信息。
远程仓库的移除和重命名
$ git remote rename [name1] [name2] /// 将name1 重命名为name2
$ git remote rm name /// 移除name1
6、Git标签
$ git tag ///显示标签信息,如:v0.1, v1.3
$ git tag -l ‘v1.8.5’ /// 查找包含v1.8.5的的标签
$ git tag -a v1.4 -m “my version 1.4” /// 创建一个带注释的v1.4标签
$ git show v1.4 /// 查看标签信息和对应的提交信息
$ git tag v1.4-lw ///提交轻量标签
$ git log —pretty=online /// 查看提交历史记录。
$ git tag -a v1.2 [校验和] /// 给过去的提交创建标签,末尾需指定校验和,或者部分校验和如:9fceb02
$ git push origin v1.5 /// 共享标签,创建标签,推送到共享服务器上
$ git push orgin —tags /// 一次性推送多个标签到远程服务器上。
$ git tag -d v1.4-lw /// 删除本地标签。
$ git push origin :refs/tags/v1.4-lw ///将删除的标签操作,更新到你的远程仓库。
$ git checkout 2.0.0 ///查看标签所指向的文件版本,会使你的仓库处于detacthed HEAD状态。
$ git checkout -b verson2 v2.0.0 ///创建一个新分支
git****别名
$ git config —global alias.co checkout /// 通过git config给你的命令设置别名。
Git****分支 —— https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell