目录
一、Git文件的三种状态:
Git工作目录,暂存区域,本地仓库
每个项目都有个Git目录,如果 git clone出来的话,就是.git的目录;如果git clone –bare的话,新建的目录本身就是Git目录。
如果是git目录中保存着的特定版本文件,就是已提交状态;如果作了修改并已存入暂存区,就是已修改状态;如果自上次取出后,作了修改但还没有放到暂存区,就是已修改状态。
二、使用Git前的配置
1、差异分析工具
还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话: $ git config --global merge.tool vimdiff。
2、查看配置信息
git config –list
三、Git基本命令
1、获取Git仓库
(1)在现有目录中初始化仓库
通过git add 命令进行跟踪,git commit进行提交(快照)
(2)克隆现有仓库 git clone [url]来获取
通过git clone的是该服务器上几乎所有数据。
克隆仓库的命令格式是 git clone [url] 。 比如,要克隆 Git 的可链接库 libgit2,可以用下面的命令:
$ git clone https://github.com/libgit2/libgit2
这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。Libgit2中会包含所有的项目文件。
如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以使用如下命令:
$ git clone https://github.com/libgit2/libgit2 mylibgit
这将执行与上一个命令相同的操作,不过在本地创建的仓库名字变为 mylibgit。
Git 支持多种数据传输协议。 上面的例子使用的是 https:// 协议,不过你也可以使用 git:// 协议或者使用 SSH 传输协议,比如 user@server:path/to/repo.git 。 在服务器上搭建 Git 将会介所有这些协议在服务器端如何配置使用,以及各种方式之间的利弊。
2、git工作目录下文件的状态(已跟踪,未跟踪)
(1)已跟踪和未跟踪
那些被纳入版本控制的文件,在上一次快照中有他们的记录,在 工作一段时间后,他们的状态可能处于未修改,已修改,已暂存。工作目录中除了已跟踪文件外的所有文件就是未跟踪文件,即不存在上一次快照的记录中,也没放入暂存区。
Git生命周期如下:
(2)检查当前状态 git status
创建了README文件,但是并没有进行任何操作,查看状态,显示未跟踪(Untracked files下面)。
git status –s是查看更为紧凑的格式
??表示six.txt是新建文件,没有放入暂存区
A表示README文件已放入暂存区
位于左边的M表示first.txt被修改过,并且已经放入暂存区
位于右边M表示third.txt被修改过,但没有放入暂存区
MM表示second.txt被修改过后提交到暂存区之后又在工作区被修改
3、跟踪新文件
git add开始跟踪一个文件,在Changes to be committed下面,表示已暂存状态。
4、暂存已修改文件
修改first.txt文件的内容,查看状态,在Changes not staged for commit下面表示已跟踪文件的内容发生了变化,但是还没有放到暂存区。
要暂存这次更新,需要git add命令。git add
命令。 这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。
可以理解为“添加内容到下一次提交中”。现在两个文件都已经暂存,下一次提交会一并记录到仓库。
再次修改first.txt的内容,再次git status查看状态发现first.txt既在暂存区里又在非暂存区里。这是因为Git实际上只是暂存里git add命令运行时的版本,如果现在提交,first.txt的版本是你最后一次运行git add命令式的版本,而不是运行git commit时在当前工作目录里的版本。所以在运行了git add之后修改了文件,需要重新运行git add 把最新版本暂存起来。
5、查看文件文件
可以看出工作区和暂存区没有变化,缓存区与版本库,版本库与工作区都有变化,deltest中得文件内容都没有了。
6、提交更新
git commit ,提交记录的是放在暂存区里的快照。
注:所有操作都需要commit,不commit, 就不会反映到 local repository(本地仓库)里面
7、跳过使用暂存区 git commit –a –m “”
8、移除文件
cnblogs.com/zhoumiao/p/8001470.html
移除某个文件确切的说是从暂存区里移除
git rm
1、只删除暂存区里的文件git rm --cache
已经将deltest添加到了暂存区,如果只想删除暂存区里的文件,需要git rm --cache
此时只是将暂存区里的文件删除,并没有将本地文件删除。查看状态时会显示文件未跟踪。
- 删除暂存区和工作区的文件 git rm –f (删除之前修改过并且已经放到暂存区里)
此时工作区和缓存区里的deltest文件都被删除了。
9、移动文件
10、查看提交历史
git log
- git log –p 显示每次提交的内容的差异
可以加-2显示最近两次的提交
- git log –stat 简略的信息
所有被修改过的文件,有多少文件被修改以及修改过的文件的哪些行为被移除或是添加
- git log --pretty指定不同方式显示信息
git log –pretty=online:显示一行
git log –pretty=format: "%h,%an:%ae %ad,%cn:%ce %cd %s"
可以定制要显示的格式
%h: 提交对象的简短哈希字串
%an: 作者(author)的名字
%ae: 作者的电子邮件地址
%ad: 作者修订日期(可以用 --date= 选项定制格式)
%cn: 提交者(committer)的名字
%ce: 提交者的电子邮件地址
%cd: 提交日期
%s: 提交说明
作者指的是实际作出修改的人,提交者指的是最后将此工作成果提交到仓库的人
- git log –pretty=format:”%h,%s” –graph
四、撤销操作
1、撤销操作
Git commit –amend
在提交之后发现忘记了暂存某些需要的修改
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
最后只有一个提交,第二次提交将代替第一次提交的结果。
2、取消暂存文件
git reset HEAD <file>
3、撤销对文件的修改
git checked -- <file>
五、远程仓库
1、查看全程仓库
(1)git clone [url]
克隆了自己的仓库后至少能啊看到origin
git remote后会看到origin
C:\Users\shuyue.guo\workspace>git clone https://gitlab.jp.sbibits.com/shuyue.guo/git-practice.git Cloning into 'git-practice'... fatal: unable to access 'https://gitlab.jp.sbibits.com/shuyue.guo/git-practice.git/': SSL certificate problem: unable to get local issuer certificate C:\Users\shuyue.guo\workspace>git config --global http.sslVerify false C:\Users\shuyue.guo\workspace>git clone https://gitlab.jp.sbibits.com/shuyue.guo/git-practice.git Cloning into 'git-practice'... warning: You appear to have cloned an empty repository.git config --global http.sslVerify false 这个是不进行 SSL验证
(2)git remote –v 查看所有的远程仓库
会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。
如果你的远程仓库不止一个,该命令会将它们全部列出。 例如,与几个协作者合作的,
2、添加远程仓库
git remote add <shortname> <url> 添加仓库的同时设置别名
brpc可以代替整个URL,可以通过git fetch pb拉去信息
分支 brpc/master
在 brpc的 master 分支可以在本地通过 pb/master 访问到——你可以将它合并到自己的某个分支中,或者如果你想要查看它的话,可以检出一个指向该点的本地分支
3、从远程仓库中抓取与拉取
git fetch [remote-name] 拉取远程仓库中所有没有的数据,将会拥有远程仓库中所有分支的引用,可以随时合并或查看
如果使用clone命令克隆了一个仓库,会自动添加为远程仓库,并以‘origin’为简写。git fetch origin 会抓取克隆后新推送的所有工作
运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
4、推送到远程仓库
只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。git push [remote-name] [branch-name] 你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送
git push origin master
克隆时通常会自动帮你设置好那两个名字(origin master)
git pull --rebase origin master 将另一个工作空间中文件push到库中,需要在push之前把库中的内容全部拉取下来进行快照。--rebase用于解决冲突。
当库为空,向库推送时,不用pull
5、查看某个远程操作
git remote show origin
6、远程仓库的移除与重命名
(1)重命名
git remote rename pb paul
git remote 同样会修改远程分支的名字 paul/master
(2)移除
git remote rm paul
git remote
六、打标签
1、列出标签
git tag
2、创建标签
(1)附注标签(建议创建)
辅助标签是存储在Git数据库中的一个完整对象。输出显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息。
通过git show 看到标签信息与对应的提交消息
输出显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息。
(2)轻量标签
轻量标签本质上是将提交校验和存储到一个文件中——没有保存任何其他信息
git tag 不需使用-a –s –m
Show看信息
看不到额外信息,只会显示出提交的信息
- 后期打标签