Git保证完整性
- Git 中所有数据在存储前都计算校验和,然后以校验和来引用。SHA-1散列(hash, 哈希). 这是一个由40个十六进制字符组成的字符串,基于 Git 中文件的内容或目录结构计算出来。
- Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。
初次运行Git前的配置
- 设置用户信息
$ git config --global user.name "#NAME#"
$ git config --global user.email #NAME@example.com#
获取Git仓库
在现有目录中初始化仓库
若需使用Git来对现有的项目进行管理,只需进入该目录并输入:
$ git init
该命令将创建一个名为.git的子目录
克隆现有的仓库
$ git clone #url#
这会在当前目录下创建一个需要克隆的仓库的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取的所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。
记录每次更新到仓库
检查当前文件状态
$ git status
$ git status -s
跟踪新文件
git add 命令可以用来开始跟踪新文件,也可以把已跟踪的文件放到暂存区,还可用于合并时把有冲突的文件标记为已解决状态等。将这个命令理解为 ‘添加内容到下一次提交中’ 而不是 ‘将一个文件添加到项目中’ 要更加合适。
$ git add #FILE#
暂存已修改的文件
修改一个已被跟踪的文件,运行 git status 命令后,这个文件将出现在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但是还没有放到暂存区。要暂存这次更新,需要运行 git add 命令。文件放到暂存区后,假设此时,再修改这个文件,重新编辑后,再运行 git status 将会发现这个文件同时出现在暂存区和非暂存区。原因是Git只不过暂存了运行 git add 时候的版本,需要再次运行 git add 把最新版本重新暂存起来,然后 git commit.
忽略文件
可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。
$ cat .gitignore
$ *.[oa]
$ *~
查看已暂存和未暂存的修改
- 若要知道具体修改了文件的什么地方,可以用 git diff 命令。
- 不带参数的 git diff 可以直接查看尚未暂存的文件更新了哪些部分。
- 若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cache 或者 git diff --staged
提交更新
$ git commit -m "#DESCRIPTION#"
跳过使用暂存区域
- 给 git commit 加上 -a 选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤.
$ git commit -a
移除文件
- 从Git中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。手动移除文件后需要再运行 git rm 记录此处移除文件的操作。
- 当我们想把文件从Git仓库中移除(即从暂存区域移除), 但仍然希望保留在当前工作目录,只是不希望Git继续跟踪。可以使用 --cached 选项。
$ git rm --cached #FILE#
- 删除以 suffix 结尾的所有文件
$ git rm \*#suffix#
移动文件
- 在Git中对文件改名
$ git mv #FILE_FROM# #FILE_TO#
- 实际上 git mv 相当于运行了下面3条命令:
$ mv #FILE_FROM# #FILE_TO#
$ git rm #FILE_FROM#
$ git add #README#
查看提交历史
- -p 选项用来查看提交文件的差异,-2 选项用来查看最近两次提交日志。 --stat 可以查看每次提交的简略统计信息。
$ git log -p -2
- 定制要显示的记录的格式
$ git log --pretty=format:"%h - %an, %ar : %s"
撤销操作
- 当提交到暂存区后发现忘记提交部分文件或者想要修改提交信息时,可以运行 -amend 重新提交,这将代替第一次提交的结果。
$ git commit --amend
取消暂存的文件
- 将暂存的文件改为非暂存状态。
$ git reset HEAD #FILE#
撤销对文件的修改
- 将已修改的文件还原为上次提交的样子。
$ git checkout -- #FILE#
远程仓库的使用
查看远程仓库
$ git remote -v
添加远程仓库
- 添加一个远程仓库,同时指定一个可以轻松引用的简写:
$ git remote add #shortname# #url#
从远程仓库中抓取与拉取
- 使用 fetch 执行完后,将可以拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
$ git fetch #remote-name#
推送到远程仓库
$ git push #REMOTE-NAME# #BRANCH-NAME#
查看远程仓库更多信息
$ git remote show #REMOTE-NAME#
远程仓库的移除与重命名
$ git remote rename #OLD_NAME# #NEW_NAME#
$ git remote rm #REMOTE_NAME#
打标签
列出标签
$ git tag
$ git rag -1 'v1.8.5*'
创建标签
- 标签类型: 轻量标签(lightweight)、附注标签(annotated)
附注标签
$ git tag -a v1.0 -m 'SOME MESSAGE'
- 查看标签信息
$ git show v1.0
轻量标签
- 轻量标签没有保存其他信息
$ git tag v1.0
后期打标签
- 对过去的提交打标签,在命令的末尾指定提交的校验和(或部分校验和)
$ git tag -a v1.0 #SHA-1#
共享标签
- 默认情况下,git push 命令并不会传送标签到远程仓库服务器上,在创建完标签后必须显示的推送标签到共享服务器上。
git push origin v1.5
- 若想一次性推送很多标签,可以使用带有 --tags 选项的 git push 命令。这将会把所有不再远程仓库服务器上的标签全部传送到那里。
$ git push #origin# --tags
检出标签
- 在 Git 中不能真的检出一个标签,标签并不能像分支一样来回移动。若想工作目录与仓库中特定的标签版本完全一样,可以在特定的标签上创建一个新分支.
$ git checkout -b #BRANCHNAME# #TAG_NAME#
定义别名
- 例如给 commit 定义别名为 ci
$ git config --global alias.ci commit
$ git config --global alias.last 'log -1 HEAD'
网友评论