# Git基础知识

Git是用于Linux内核开发的版本控制工具。与CVSSubversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。

# Git中的文件状态

  • 未跟踪
  • 已跟踪但未修改
  • 已跟踪已经修改
  • 已添加至暂存区中

如下图所示

git-file-status.png

# 本地操作

# 跟踪文件(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.png

  • 追加提交git commit --amend

它可以在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中。

我们来测试一下
git-commit-amend01.png

amend02.png

执行

git commit -amend -m"amend last commit"

amend03.png

# 远程操作

为了能在任意 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]

Last Updated: 3/21/2020, 3:58:50 PM