git学习笔记

序:

书本地址 git-scm.com/book/zh

此书本内容丰富且形象生动,是学习git的好材料。以下是部分学习笔记。

第一章 git 大局观

git有三种状态。已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。

基本的 Git 工作流程如下:

1. 在工作目录中修改文件。

2. 暂存文件,将文件的快照放入暂存区域。

3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

第二章 git基本操作

1)

Git 获取仓库的方式有两种:一种是直接本地初始建仓;另一种是克隆已有的仓库到本地。

1.第一种方法直接在相应的文件夹下输入 :

$ git init

则会自动生成一个.git文件夹,用于管理仓库信息。

2.第二种方法直接在远程仓库中克隆到本地:

$ git clone <url>

Git 支持多种数据传输协议。 包括 https:// 协议 和 git:// 协议,或者使用 SSH 传输协议,比如 user@server:path/to/repo.git 。

2)

文件状态的生命周期如下:

查看当前仓库的文件状态可输入:

$ git status

跟踪新文件:

$ git add <filename>

 

为了忽略一些不想跟踪的文件,可以在本地仓库下新建 .gitignore 文件。用法举例如下:

查看文件之间的改动可以采用git diff命令:

$ git diff  #查看工作区文件和暂存区文件的区别
$ git diff —cached #查看暂存区文件和分支文件的区别

提交文件,同时附加说明:

$ git commit -m “xxxxxxxx”

 删除文件(从暂存区和工作区中移除):

$ git rm <filename>

如果删除之前已经修改过文件但未暂存则需要加-f:

$ git rm -f <filename>

单纯从工作区移除则是:

$ rm <filename>

如果想从暂存区删除文件,但本地想保留,可以考虑设置.gitignore文件

移动文件,对文件改名:

$ git mv <filenameA> <filenameB>

 查看提交历史:

$ git log

显示每次提交的具体改动 -p, 显示最近2次的改动 -2:

$ git log -p -2

显示每次提交的改动统计信息:

$ git log —stat

3)撤销操作

当commit之后,发现漏了要提交某个文件,可以利用—amend:

$ git commit -m “xxxxx”
$ git add <forgotten_filename>
$ git commit —amend

当你想把某个文件从暂存区撤出:

$ git reset HEAD <filename>

当你不想保留工作区修改过的文件,想让其回到提交时的样子:

$ git checkout — <filename>

4)远程仓库

查看远程仓库:

$ git remote

同时显示url:

$ git remote -v

显示更多信息,例如分支信息等:

$ git remote show <remotename>

在仓库中添加其他远程仓库:

$ git remote add <shortname> <url>

从远程仓库获取更新数据:

$ git fetch <remotename>

推送到远程仓库:

$ git push <remotename> <branchname>

远程仓库重命名:

$ git remote rename <oldname> <newname>

移除远程仓库:

$ git remote rm <remotename>

5)打标签

列出已有标签:

$ git tag

第三章 Git分支

查看所有分支:

$ git branch

在上一次的提交对象中创建分支:

$ git branch <branchname>

在本地 HEAD 会指向当前分支,切换分支:

$ git checkout <branchname>

查看项目分叉历史:

$ git log —oneline —decorate —graph —all

删除分支:

$ git branch -d <branchname>

假设当前项目分叉如下:

如果想将master分支合并到hotfix分支上:

$ git checkout master
$ git merge hotifx

这时不会产生新的snapshots,master指向C4

假设当前项目开发到如下:

如果想将iss53分支合并入master分支,这时会利用到3个snapshots,分别是各自的snapshots C4, C5以及共同祖先C4,然后创建一个新的提交:

但这时候可能会遇到合并冲突,因为在不同分支上,我们可能会对同一个文件做不同的修改,此时可以先查看那些因冲突而尚未被合并(unmerged)的文件:

$ git status

然后进入相应的文件中手动解决冲突。

在文件中,会出现以下情况:

然后手动修改,保留想要的代码。

等所有冲突都解决了,需要重新提交代码:

$ git commit

如果想采用图形化工具更便捷的解决冲突,可以输入:

$ git mergetool

例如:BeyondCampare可以方便整理

当你将本地的分支xxxx push到远程仓库的时候:

$ git push origin xxxx

远程仓库也会多一个分支 origin/xxxx

此时,当别人从远程仓库中fetch的时候:

$ git fetch origin

在别人的本地仓库中也会获得origin/xxxx的数据以及多了一个origin/xxxx分支指针,但本地不会多一个xxxx分支指针,只有一个不可修改的 origin/xxxx分支指针

可以将其合并到自己指定的分支上:

$ git merge origin/xxxx

也可以新建一个本地的分支 xxxx,此时的xxxx可以进行不同的命名,如命名为yyyy,此时的yyyy和prigin/xxxx是关联的:

$ git checkout -b yyyy origin/xxxx

又或者采用跟踪分支命令,直接新建一个本地分支xxxx:

$ git checkout —track origin/xxxx

查看跟踪分支情况:

$ git branch -vv

删除远程分支:

$ git push origin —delete xxxx

变基是一种可以让分支合并更加线性简介的合并方式,例如以下情况:

如果直接采用merge的方法会得到结果如下:

如果采用变基(rebasing)的方法:

$ git checkout experiment
$ git rebase master

则会对比 C3到C2 和C4到C2 的区别,根据这个区别生成临时文件,同时在C3的后面生成一个新的分支节点C4’:

然后我们再回到master分支,将master合并入experiment中:

$ git checkout master
$ git merge experiment

此时的项目结构就显得线性简介,push到远程仓库上,远程仓库也方便管理

第四章 服务器上的Git

Git服务器通常使用SSH公钥进行认证。

公钥文件为id_rsa.pub,一般在 ~/.ssh 目录下,

若没有,则可以生成:

$ ssh-keygen -t rsa -C “xxx@yyy.com"

如果本地还没有远程仓库相关的文件,你可以直接clone下来。

如果本地已经有了一些文件,你想将相应的文件夹和远程仓库关联,可以输入:

$ git remote add gitlab https://xxxx/xxxx/xxxx.git

附录 代理

export http_proxy=http://10.x.xx.xxx:3128/
export https_proxy=http://10.x.xx.xxx:3128/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值