git学习笔记和一些常见问题解决办法

git

学习极客时间的笔记
一些常用的命令及解决办法

简介

vsc出现之前的情况

用目录拷贝区别不同版本
公共文件容易被覆盖
成员沟通成本很高,代码继承效率低下

集中式vcs

有几种的版本管理服务器
具备文件版本管理和分值管理能力
继承效率有明显地提高
客户端必须时刻和服务器相连

分布式vcs

服务器和客户端都有完整的版本库
脱离服务端,客户端张扬可以管理版本
查看历史和版本比较等多数操作,都不需要访问服务器,比集中式vsc更能提高版本效率

git特点

最优的存储能力
非凡的性能
开源的
很容易做备份
支持离线操作
很容易定制工作流程

使用git之前的配置

配置user信息

git config --global user.name jim
git config --global user.email [email protected]

config的三个作用域

git config --local # 只对某个仓库有效
git config --global # 对当前用户所有仓库有效
git config --system # system 对系统所有登陆的用户有效

显示config的配置, 加 --list

git config --list --local
git config --list --global
git config --list --system

建Git仓库

两种场景:

  1. 把已有的项目代码纳入Git管理
cd 项目代码所在的文件夹
git init
  1. 新建的项目直接用Git管理
cd 某个文件夹
git init your_project     # 会在当前路径下创建和项目名称同名的文件夹
cd your_project

往仓库里添加文件git学习笔记和一些常见问题解决办法_第1张图片

git add files
git commit
git add -u # 将当前修改的文件全部放入暂存区

给文件重命名的简便方法

正常文件重命名方式

mv demo demo_rename
git rm demo
git commit

简便方法

git mv readme readme.md

通过gitlog查看版本演变历史

git log
–oneline
–n4 # 最近四次
–all # 所有分支的版本信息
–graph # 图形化界面

分支

git branch -v
git checkout -b temp 415c5c80…

探究.log目录

HEAD: 存储着正在工作的分支的refs
config: config信息
refs/heads: 分支
refs/heads/master: 文件存储的是分支master指针
refs/tags: 设置分支标记,比如该分支为某个重要版本。里面的文件存储的是tag的指针
objects/: 文件内容的指针信息
objects/pack: 如果objects/下文件太多,就打包到pack中

数据类型: tree, blob

git cat-file -t 59a4b3 # 查看该指针对象类型
git cat-file -p 59a4b3 # 查看对象内容

commit、tree、blob三个对象之间的关系

git学习笔记和一些常见问题解决办法_第2张图片

commit 存储commit信息和tree
tree 存储的是blob和tree
blob就是存储的文件

数一数tree的个数

git学习笔记和一些常见问题解决办法_第3张图片

在将文件加入暂存区的时,就会在/objects/创建文件,创建blob

分离头指针情况下注意事项

可以checkout某一个commit版本,修改之后需要新建一个分支来保存修改,不然会丢失修改

git checkout 412bx6s82b

head 和 branch

head 是指向最新一次的commit

git diff 123123nb dasd8 # 比较两次commit
git diff HEAD HEAD^1 # 和上一次比较
git diff HEAD HEAD11 # 和上上次比较
git dfii HEAD HEAD~2 # 和上上次比较

怎么删除不需要的分支

git branch -d 123bx82x # 删除分支

怎么修改最新commit的message?

git commit --amend

怎么修改老旧commit的message

git rebase -i 上一commit版本号
reword

怎么把连续的多个commit整理成1个?

git rebase -i 上一commit版本号
squash

怎么把间隔的几个commit整理成1个?

怎么比较暂存区和HEAD所含文件的差异?

git diff --cached

怎么比较工作区和暂存区的差异

git diff
git diff – demo # 仅对demo文件进行比较

如何让暂存区恢复成和HEAD的一样?

git reset HEAD

如何让工作区的文件恢复为和暂存区一样

git checkout – index.html

怎样取消暂存区部分文件的更改

git reset HEAD – demo # 撤销demo文件更改

消除最近的几次提交

回退到指定版本

git reset --hard 123sad12d

看看不同提交的指定文件的差异

查看 temp 和 master 两个分支的中index.html的差异

git diff temp master – index.html

也可以比较commit之间的差异

git diff 213as 123sd – index.html

正确删除文件的方法

git rm demo

开发中临时加塞了紧急任务怎么处理?

git stash

将之前的临时工作空间恢复,并且之前保存的临时空间还存在

git statsh apply

将之前的临时工作空间恢复,并将之前的临时空间丢弃

git statsh pop

git statsh list

如何指定不需要Git管理的文件?

.gitignore

如何将Git仓库备份到本地?

git学习笔记和一些常见问题解决办法_第4张图片

哑协议与智能协议
直观区别: 哑协议传输进度不可见,智能协议传输可见、
传输速度: 智能协议比哑协议传输速度快。

哑协议

git clone --bare F:\tmp\git_learning.git ya.git

智能协议

git clone file://F:\tmp\git_learning.git zhineng

本地push到远端

git remote add zhineng file:\F:\tmp\git_learning\git
git push zhineng

将本地仓库同步到GitHub中

查看所有的远程连接仓库

git remote -v

将所有分支都上传上去

git push --all
git push origin master

添加远程仓库

git remote add master git@…

将网络仓库拉下来,但是并不会merge

git fetch origin master

查看本地和远端分支

git branch -av

将当前分支与master分支合并

git merge origin/master

不同人修改不同文件如何处理?

根据远程的分支创建到本地的分支

git checkout -b add_git_commands origin/add_git_commands

A用户修改了a文件, push到远程端,B用户修改了b文件, 然后再push到远端会出问题.

B用户可以先fetch远端的分支到本地,再merge,最后push到远程端

不同人修改了通文件的不同区域如何处理?

直接通过fetchmerge可以直接合并到一起再push上去是没问题的

不同人修改了通文件的同一区域如何处理?

首先fetch远程端,然后沟通修改同一区域,再commit即可,最后即可将项目push到远程端。

同时更改了文件名和文件内容如何处理?

A修改了文件名,push到远程端,B修改了文件内容,push到远程端non-fast-forwards错误。

解决: B直接pull远程端到本地,git会感知,直接merge到一起,然后再push即可

把同一文件改成不同的文件名如何处理?

A修改了文件名push,B修改了文件名push不上去。

解决: Bfetch远程端到本地,然后讨论到底要修改哪个名字,rm 不需要的名字,add需变更的名字。最后push

禁止向继承分支执行push -f 操作

禁止向继承分支执行变更历史的操作

怎么快速淘到感兴趣的开源项目

tornado in:readme
deploy filename: gitlab
starts: >5000

怎样在GitHub上搭建个人博客

git garden

blog easily start in:readme stars:>5000

开源项目怎么保证代码质量

在提交代码时,可以检查代码的规范

为何需要组织类型的仓库?

可以对组织成员进行权限控制。

创建团队项目

怎么选择适合自己团队的工作流

主干开发
适用于:组件开发的团队,成员能力强,人员少,沟通顺畅。用户升级组件成本低的环境
git学习笔记和一些常见问题解决办法_第5张图片

Git Flow
适用于: 不具备主干开发能力。有预定的发布周期。需要执行严格的发布流程。
git学习笔记和一些常见问题解决办法_第6张图片

GitHub Flow
适用于:不具备主干开发能力。随时集成随时发布:分支集成时经过代码评审和自动化测试,就可以立即发布的应用。

git学习笔记和一些常见问题解决办法_第7张图片
GitLab Flow(带生产分支)
适用于: 不具备主干开发能力。无法控制准确的发布时间,但有要求不停地集成。
git学习笔记和一些常见问题解决办法_第8张图片

GitLab Flow(带环境分支)
适用于:不具备主干开发能力。需要逐个通过各个测试环境的验证才能发布。

git学习笔记和一些常见问题解决办法_第9张图片

GitLab Flow(带发布分支)
适用于:不具备主干开发能力。需要对外发布和维护不同版本。

git学习笔记和一些常见问题解决办法_第10张图片

如何挑选合适的分支集成策略

三种merge方式.
Allow merge commits :

master出现一个两个分支merge之后的新的commit。从分支消失。

Allow squash merging:

master出现一个两个分支merge之后的新的commit。

Allow rebase merging:

将从分支的每一个commit都放在master分支上,出现多个master commit。

github设置
在github上, project/settings中可以去配置该项目允许的merge方式。
git学习笔记和一些常见问题解决办法_第11张图片

在pull request中可以将分支合并

启用issue跟踪需求和任务

如何用project管理issue

可以创建看板,一些计划可以放在上面进行管理。

项目内部怎么实施codereview

在projects/settings/Branches中可以设置分支合并的规则。

设置项: Require pull request reviews before merging 代表每次require pull 都需要人去审核代码,同意之后才可以pull上去。可以设置审核人数。

团队协作时如何做多分支的集成?

怎样保证集成的质量

持续集成

github apps
codecov

travis ci
将项目打包到release中

怎么给项目增加详细的知道文档

wiki

国内互联网企业为什么喜欢gitlab

gitlab 集成了CI/CD

github 通过第三方app 添加CI/CD

Gitlab上怎么做codereview

GitLab上怎么保证集成的质量

配置 .yml文件

将代码merge到gitlab上时,可以自动的对代码进行测试,然后再自动的部署到服务器中。

常见错误解决

fatal: refusing to merge unrelated histories

在merge两个分支的时候,出现该错误。主要是因为两个分支无相关的历史

解决办法:
–allow-unrelated-histories

no-fast-forward

你可能感兴趣的:(git,git)