# Git基础知识
Git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。
# Git中的文件状态
- 未跟踪
- 已跟踪但未修改
- 已跟踪已经修改
- 已添加至暂存区中
如下图所示
# 本地操作
# 跟踪文件(git add)
常用命令如下,更多查看官方详细文档
// 添加所有
git add -A
或者
// 添加当前目录的所有文件(注意老版本会忽略删除的文件)
git add .
或者
git add 文件名
# 放弃跟踪(git reset HEAD)
// 放弃指定文件
git reset HEAD 文件名
// 放弃所有
git reset HEAD .
# 修改文件git会自动标识是修改状态
# 取消文件修改(注意未添加进缓存的文件)
git checkout -- 文件名称
或者取消所有
git checkout -- .
# 把暂存的文件提交至版本库(Index)
git commit -m"备注提交信息"
git commit -a -m"提交所有"
- 更多命令参考
- 追加提交git commit --amend
它可以在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中。
我们来测试一下
执行
git commit -amend -m"amend last commit"
# 远程操作
为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。
# 查看远程仓库
如果想要查看某一个远程仓库的更多信息,可以使用 git remote show [remote-name]
命令。
git remote
//输出 origin
//如果你的远程仓库不止一个,该命令会将它们全部列出。
git remote -v
git remote show origin
# 克隆和添加远程仓库
# 克隆(git clone)
git clone https://github.com/debingfeng/blog.git
# 添加远程仓库(git remote add)
git remote add origin https://github.com/debingfeng/blog.git
# 拉取远程仓库( git fetch and git pull )
- git fetch
这个命令会访问远程仓库,从中拉取所有你还没有的数据。执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
- git pull
这个命令会从远程仓库中拉取所有的数据,也可以拉取指定分支,并自动与本地合并。如果冲突了还需要处理冲突。
// 拉取所有
git pull
// 拉取指定分支信息
git pull origin master
# 远程仓库的移除与重命名
如果想要重命名引用的名字可以运行 git remote rename
去修改一个远程仓库的简写名。
// 将test 改为 branch1
git remote rename test branch1
git remote
// 输出
// master
// branch1
# 向远程仓库推送信息
当你想分享你的项目时,必须将其推送到上游.这个命令很简单:git push [remote-name] [branch-name]
。
git push origin master
# 标签管理
像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)。
# 列出标签git tag
# 创建标签
Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。
然而,附注标签是存储在 Git 数据库中的一个完整对象。
# 创建附注标签
git tag -a v1.0 -m ' version 1.0'
# 创建轻量标签
git tag v1.0 -m ' version 1.0'
# 后期打标签
可以针对指定的commit hash 来打标签。
// 例如给9fceb02打上标签
git tag -a v1.2 9fceb02
# 发布标签
执行这个命令 git push origin [tagname]
。
git push origin v1.2
# 删除标签
执行git tag -d [标签名] 删除本地的标签。
- 删除已经发布的标签
先删除本地标签,然后再执行 git push origin :refs/tags/[tagName]