Git 完整学习笔记

安装 git

centos 安装 git

sudo yum install git

ubuntu 安装 git

sudo apt-get install git

下载完git后,在与远程库交互前首先要指定nameemail(非必需),然后生成密钥对:

[root@izuf6esjmghweowgd0ryazz ~]# git config --global user.name "lzj"
[root@izuf6esjmghweowgd0ryazz ~]# git config --global user.email "lzj@xxx.com"
[root@izuf6esjmghweowgd0ryazz ~]# ssh-keygen -t rsa -C "lzj@xxx.com"

找到/{home}/.ssh/id_rsa.pub文件,将文件内容(公钥)放到远程仓库上即可

提交文件

  1. 使用命令git init初始化git仓库
  2. 使用命令git add test.txt把文件添加到暂存区
  3. 使用命令git commit -m "a new txt"提交给版本库,并添加本次提交的说明

可使用git add . 将当前目录下所有修改添加到暂存区

查看 git 状态

修改了文件后,可按照如下的步骤提交文件:

  1. 使用命令git status查看结果
  2. 使用命令git diff查看变更内容
  3. 确认了变更内容后使用命令git add test.txt添加到仓库
  4. 再次使用命令git status得知将要被提交的修改包括test.txt
  5. 使用命令git commit -m msg test.txt提交到版本库

随时使用git status掌握工作区的状态

查看 git 版本历史

通过命令git log可查看所有的版本变更记录,会显示从最近到最远的提交日志

通过命令git log --pretty=oneline简化输出信息,每行的前面一大串字母和数字的组合是十六进制的commit id(版本号)。由于是分布式的版本控制系统,每次提交产生的commit id都不同,避免了多人协作时的版本号冲突问题

回退版本

回退到上一个版本:git reset --hard HEAD^

当前版本是HEAD, 上一个版本是HEAD^,上上个版本是HEAD^^,上100个版本是HEAD~100

回退后若想回到原来最新的版本,在保持命令行窗口不关的前提下,往上找到最新版本的commit id
使用命令git reset --hard 1094a1094a可以是commit id的前几位,git会自己去找,也不能太短

如果关闭了命令行窗口,可以通过命令git reflog查看每一次的命令,通过查看commit的那一行版本号(第一个字段),再通过命令回复

暂存区

git add实际上是将文件存到暂存区(.git目录下的index文件就是暂存区),git commit就是将暂存区中的所有文件提交到当前分支

每次修改若不add到暂存区,就不会被commit到当前分支

撤销修改

未添加到暂存区

当文件修改后,没有add到暂存区时,使用命令git checkout -- <file>可将文件恢复到和版本库一样的状态

已添加到暂存区,未提交到版本库

当修改的文件后被add到暂存区,且未提交到版本库,使用命令git checkout -- <file>可将文件恢复到最近一次add到暂存区的状态

也可使用git reset把暂存区的修改放回工作区

已提交到本地版本库

使用git reset回退版本

注意:

当把修改push到远程版本库时,无法撤销修改

提交删除操作

对于git来说删除也是一个修改,当在工作区中删除了一个文件时,有两个操作待选:

  1. git rm <file>添加删除到暂存区,再git commit -m <message> <file>
  2. 撤销删除:git checkout – , 用版本库的版本替换工作区的版本

查看远程仓库

  1. 查看远程仓库信息使用git remote
  2. 查看远程仓库详细信息git remote -v

删除远程仓库

git remote rm origin

添加远程仓库

github上创建新的仓库learngit,通过以下命令将本地库与远程库关联(origin是远程仓库的名称,可以修改成其他的,如github):

git remote add origin https://github.com/<user-name>/learngit.git

将本地库的内容推送到远程库:

git push -u origin master

第一次推送时可加上-u参数,git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

之后的推送就可以使用命令git push origin master

gitsvn相比最大的好处就是在没有网络的情况下,也可以正常工作,只要将修改提交给本地,待有网络的时候推送到远程库,而svn在没有网络的情况下是无法正常工作的

从远程仓库克隆

github上创建新的仓库gitskill,使用以下命令克隆到本地:

git clone git@github.com:<user-name>/gitskill.git

git支持多种协议,可使用https,也可使用git协议。默认的git协议使用的是ssh,速度最快,而https协议速度较慢,每次推送还要输入密码

分支管理

可以创建一个分支进行开发任务,这样既不会影响别人在原来的分支上正常工作,也不怕丢失每天的任务进度,等开发完成后,可将自己的分支进行合并

分支的添加,删除,切换,查看

应当使用分支完成某个任务,完成后合并到master分支,再删除原来的分支

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

删除分支可以遵循以下两步骤:

  1. 先从本地删除

git branch -d <branch-name>(被merge到了其他分支)

git branch -D <branch-name>(没有被merge到其他分支)

  1. 删除远程分支

git push origin :<branch-name>

解决冲突

当创建出了一个分支,在这条分支上做了修改并提交,主分支也做了修改并提交后,合并分支就会出现冲突,此时应手动解决冲突再进行提交操作

git log --graph命令可以看到分支合并图

分支管理策略

默认合并分支采用的是fast forward模式,此时删除分支后,会丢失分支信息

禁用fast forward模式时,git会在合并时产生一个新的commit,会保留分支信息(因为产生了新的提交,需要加上message

使用命令git merge **--no-ff** -m "merge with no-ff" dev禁用fast forward模式来合并分支

使用命令git log --graph --pretty=oneline --abbrev-commit查看分支历史

注意:

master分支是非常稳定的,只能用来发布新版本

需要在dev分支上进行开发,不断merge到dev上

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并

bug分支

修复bug时,可以通过创建新的bug分支进行修复,再merge到master,最后删除bug分支

若是当前有任务未完成,无法commit时,可以使用git stash保存现场,然后修复bug。完成后,再通过git stash pop回到工作现场

若多次git stash,可使用命令git stash list查看,然后恢复指定的stash,如:

git stash apply stash@{0}

feature分支

当接收到开发一个新功能的需求时,可以创建一个feature分支,若功能开发完毕后已提交,此时需求发生变动,该功能取消,而这时feature分支没有mergedev分支,需要使用以下命令删除feature分支:

git branch -D feature

推送分支

推送分支就是把本地的所有提交推送到远程:git push origin master

也可推送dev分支:git push origin dev

bug分支一般不需要push

feature分支若是与他人协作,可以push

多人协作的模式

一般可以遵循以下步骤:

  1. 首先试图推送:git push origin <branch-name>

  2. 若推送失败,说明远程库更新,需要拉取远程库到本地:git pull

  3. 若有冲突,需要手动解决冲突,然后在本地提交

  4. 再用git push origin <branch-name>推送就能成功 (origin是远程库的名称)

  5. 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,使用命令git branch --set-upstream-to <branch-name> origin/<branch-name>创建链接关系

  6. 若有需要,可在本地创建与远程对应的分支:git checkout -b branch-name origin/branch-name

标签

标签(tag)与某个commit绑定在一起,可以通过tag快速找到某个commit,而不用依靠无意义的版本号(commit id)

创建标签

使用命令git tag v1.0给最近的一个commit打上一个新标签v1.0

使用命令git tag -a <tag-name> -m <tag-message> [<commit-id>]创建带有说明的标签(-a 指定标签名,-m 指定说明文字)

查看所有标签

git tag

为之前的commit打上标签

  1. 使用命令git log --pretty=oneline --abbrev-commit查看所有的commit记录

  2. 使用命令git tag <tag-name> <commit-id>为某个版本打上标签

查看标签具体信息

标签是按照字母顺序排列的,使用命令git show <tag-name>查看标签的具体信息

操作标签

未推送到远程时删除标签:git tag -d <tag-name>

推送某个标签到远程:git push origin <tag-name>

推送所有标签到远程:git push origin --tags

推送到远程后删除标签依次需要以下两步:

  1. 先从本地删除:git tag -d <tag-name>

  2. 从远程删除:git push origin[空][空]: refs/tags/<tag-name>

注意:

  • 从远程删除标签的命令中有个冒号,且冒号前面有一个空格
  • 可以理解为:将一个推送给了后面的远程tag,从而删除了tag

忽略特殊文件

所有 .gitignore 配置文件可以在线找到:

https://github.com/github/gitignore

配置完后将 .gitignore 文件提交即可

通过git status查看工作目录是否干净来检验配置文件是否满足要求

配置命令别名

若想用git ci -m代替git commit -m,可以用以下命令:

git config --global alias .ci commit

配置git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用

config位于.git目录下,若要删除某项别名直接在文件中删除对应的行即可

仓库的 .git/config 只保存当前仓库的local配置,而用户的global配置在用户主目录下的 .gitconfig

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason说编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值