Git入门指南

GIT的用法

下载

通过GIT官网下载

安装成功标志,打开文件夹,右击鼠标,发现有 git 的命令,安装成功

使用

第一阶段 快速入门

  1. 在资源管理器中,进入项目

  2. 右击鼠标,选择 Git Base Here ,跳转到 git 命令窗口

  3. 初始化 git 仓库

    git init
    
  4. 输入命令 git status ,查看该仓库下所有文件的状态 (共三种状态,一、工作区,呈红色;二、缓存区,呈绿色;三、已被管理,不可见)

    git status  // 告诉你有文件被修改过
    git diff  // 可以查看修改内容。
    
  5. 提交修改,工作区到缓存区

    git add 文件名   // 提交单个文件
    git add .  // 提交所有文件
    注意: git add 命令提交的是修改的内容,所有每次修改文件后,都需要 git add 一下
    
  6. 个人信息配置 ( 配置一次即可 )

    git config --global user.email ‘[email protected]’ // 配置邮箱

    git config --global user.name ‘lis’ // 配置用户名

  7. 将缓存区的所有文件提交到当前分支,并生成 git 版本库

    git commit -m '描述信息'   //  commit [ kəˈmit ] 承诺,保证
    

  8. 查看之前的 git 版本库

    git log     
    git log --pretty=oneline   // 简易化版本记录
    

第二阶段 拓展功能

  1. 回滚至之前的版本

    git log   // 查看之前的版本号
    git reset --hard 版本号    // 回滚到指定的版本   reset [rēˈset] 重启
    
  2. 回滚至之后的版本

    git reflog   // 记录每一次命令
    git reset --hard 版本号    // 回滚到指定的版本
    
  3. 丢弃工作区的修改,文件回到上一次修改的时候

    git checkout -- 文件名
    // 对还未 add 的文件,回到版本库的状态或上一次 add 之后的状态
    
  4. 丢弃缓存区保存的修改,文件回到 add 之前的状态

    git reset head 文件名
    // 对已经 add 的文件,删除 缓存区的修改,回到 add 之前的状态
    // 此时可以进行 git checkout -- 文件名 操作,在删除一次修改
    
  5. 撤销修改,版本区回到缓存区

    // 当文件被 add 而且 commit 之后,如何回到之前的状态呢
    git reset --soft 版本号
    

分支撤销修改,版本区回到工作区

git reset --mix 版本号  // 回到工作区
git reset --hard 版本号 // 

分支

在版本更替的时候

      C1   ------------  >  C2  ----------  >   C3
    原始数据          没修改+修改+新增       没修改+修改+新增
	  |                 |    |   |           |
	  -------------------    |   |           |
	  |                      |   |           |
	  ----------------------------------------

在 C1 版本保存所有原始数据文件
在 C2 版本保存所有 修改+新增 的文件,
在 C2 版本不会保存没修改的文件,但会保存一个指向之前版本保存原始文件的指针,这里指向C1
// 每有一个文件,保存一个指针
在 C3 版本保存所有 修改+新增 的文件,
在 C3 版本没修改的文件可能是C1原始的,也可能是C2新增的,会含有多个指向不同版本的指针
       ----------------> C4 -----
	  |						  |
      C3					   ---------- >  C6
	  |                         |
	  -----------------> C5 -----

可能在 C3 的基础上开发了 C4
又在 C3 的基础上开发了 C5
现在想将 C4 和 C5 整合在一起,形成 C6
在此提出分支的概念

分支的作用:假如我们在 C3 的基础上正在开发 C4,但 C3 突然出现 BUG ,我们就需要对 C3 进行修改,变为 C5。

但,我们仍然可以在 C3 的基础上,开发 C4,最后将 C4 和 C5 整合起来,变为 C6 上线。

在这里:以 C1、C2、C3、C6 为干线的这些版本,称为主分支 master

​ 以开发为主的 这条分支,可以起名叫 dev 包含 C1、C2、C3、C4

​ 以修复为主的 这条分支,可以起名叫 bug 包含 C1、C2、C3、C5

当然 修复完bug,可以立即将 bug 分支合并到主分支上,根据业务需求来定。

查看所有的分支

git branch        // branch [branCH] 支,分会
// 默认 master

创建分支

git branch 分支名

跳转分支

git checkout 分支名
git switch 分支名
// 在此分支上修改文件,不会影响别的分支上的文件
git checkout -b 分支名  // 创建并跳转到该分支
git switch -c dev  // 创建并跳转到该分支  git 新命令

合并分支

// 假如我们在 C3 版本发现 bug ,然后创建 bug 分支
// 在 bug 分支上,修服完 bug ,保存版本为 C4
// 然后 主线合并分支
// 一定要切换回mastet 必须在主线上操作 ,然后执行如下代码
git checkout master
git merge bug              // merge [mərj] 合并,融合

删除分支

// 修复完bug,分支就没用了
git branch -d bug     // delete 删除

解决冲突问题

// 例 C4 在 C3 基础上开发新项目
// C5 修改完 C3 bug,合并到主线
// 当开发完成时,将C4 合并到 C5
// 会报以下错误
Mergo config in 文件名  (起冲突的文件)
// 打开该文件  会看到以下情景
<<<<<<<<<<<<<<<<<<<<<<< HEAD
C5 中与 C4 冲突的文件
=================
C4 中与 C5 冲突的文件
>>>>>>>>>>>>>>>>>>>>>>> dev
// 起冲突的原因, C4 和 C5 都对 C3 中同一个文件,进行修改
// 这个时候,需要人为的解决这个问题 (例,将 C5 中的内容替换为 C4 的内容,前提 C5 的内容,兼容之前的版本 )

我们在修复 BUG 时,应该尽量兼容之前的版本,解决冲突后再进行合并,就没有问题了。

git status 
// 也可以查看冲突文件

Github 的使用

注册账户

创建仓库

本地代码推送

在命令行上创建新的存储库

echo "# github" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/14465/github.git
git push -u origin master

从命令行推送现有存储库

git remote add origin https://github.com/14465/github.git    // 远程 增加 仓库名 仓库地址
git push -u origin master  // 推送 -u  仓库名 支线名  

在外地下载代码

git clone https://github.com/14465/github.git
// clone 完全拷贝  
// 注意:此时 git branch  只能看到 master ,但你可以使用 git checkout 分支名 跳转到其它分支

dev数据更新

在开发 dev 分支时,应更新 dev 分支 ,将 master 里最新的数据 合并到 dev 里,( master 里的数据不会改变 )

// 1.查看 dev  (跳转到 dev)
git checkout dev
// 2.合并 master (获取master最新的数据 [仅一次]git merge master  

在外地推送更新完的代码

git push origin dev

回家更新dev

当你回到家时,你应该将在外地上传的dev下载下来

git pull origin dev    // 拉 仓库名 分支名
// 只获取更新后的文件
// 开发
// 提交
git add .
git commit -m 'xxx版本'
git push origin dev

开发完毕,要上线

// 切换
git checkout master
// 合并
git merge dev
// 推送 master
git push origin master
// 更新 dev (保持和master一致)
git checkout dev
git merge master
git push origin dev
// 回家拿到最新的 dev ,继续开发 ····

补充

git pull origin dev
// 等价于下面两条合体
git fetch origin dev   // 将 dev 从GitHub 下载到版本区,  fetch [feCH] 取
                       // 为区别自己的dev,下载的文件名为 origi/dev
git merge origin/dev   // 将 origin/dev 合并到自己的 dev
                       // 因此自己的 dev 发生变化,将自动变更状态到工作区

rebase 变基

使 git 记录变得简洁

第1种应用场景

将多条提交记录,整合为一条记录

git rebase -i 版本号   // 不是最新的版本
//  将这个版本号直到最新的版本记录,整合成一条记录
git rebase -i HEAD~3   
//  将最新的3条版本记录整合成一条记录
// 上面点击完成后,会显示下面信息  pick [pik] 挑
pick 版本号 V2
pick 版本号 V3
pick 版本号 V4

//   这个时候,要将 V3 和 V4 最前面的 pick 修改为 s 
pick 版本号 V2
s 版本号 V3
s 版本号 V4
//  s 代表合并到上面的版本去
// 在最下面输入命令提交  :wq 保存  :q 返回
:wq
// 上面点击完成后,会显示下面信息
v2 xxxxx
v3 xxxxx
v4 xxxxx
// 这是提示信息,提示你给新的版本起名称
//  将上面三条记录,全部删除,然后输入 v2 & v3 & v4  (可以任意起名称)

// 输入 
git log
// 结果
v2 & v3 & v4
版本号
v1
版本号

注意:合并记录时,不要将 push 到远程的版本一起合并,后面处理很麻烦。

第2种应用场景

将支线合并到主线上

// 原来主线和支线是两条线
C1 --- > C2 --- > C4 --- > C5
         |                 |
         ------ > C3 -------
// 合并之后变为一条线
C1 --- > C2 --- > C3 --- > C4 --- > C5
// 1 先切换到支线
git checkout dev
// 2 执行 rebase 命令,在 master 中备份
git rebase master
// 3 切换到主线
git checkout master
// 4 接收 dev ( 备份接收数据 )
git merge dev

查看记录小技巧

// 查看历史记录
git log
// 附带图形模式查看历史记录
git log --graph
// 查看简洁版的历史记录 (每条记录只含 简易版本号、支线名称、版本名称)
git log --graph --pretty=format:"%h %s"    // h 代表 hash 

第3种应用场景

// 在公司写的 v1 忘记上传 
// 回家写的 v2 上传
// 来到公司  不在使用 git pull origin dev  (这会产生分叉)
git fetch origin dev
git rebase origin/dev   // 这样不会产生分叉

注意:使用 git rebase 可能会产生冲突,先解决冲突,

然后 git add . ( 将冲突的文件修复完毕,在回到缓存区 )

最后再执行 git rebase --continue

beyond compare

快速解决冲突的软件

安装

在 git 中配置

git config --local merge.tool bc3    // --local 只在当前项目生效
git config --local mergetool.path 'user/local/bin/bcomp'   // 这个路径是 compare 的安装路径
git config --local mergetool.keepBackup false   // 解决冲突后不保留备份

使用过程

当产生冲突时,它会自动弹出来,并罗列出来,不在需要我们自己在文件里修改

多人协同开发流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6B7zfCPD-1623920962469)(C:\Users\14465\AppData\Roaming\Typora\typora-user-images\1587909115224.png)]

给当前版本 起标签

git tag -a v1 -m '第一版'

创建组织

邀请成员

在某个项目,在setting中设置权限

在分支的基础上再创建一个分支

// 1 先切换到 dev 分支
git checkout dev
// 2 创建并切换到 ddz 分支
git checkout -b ddz    // checkout -b   == >  先 branch 再 checkout
// 然后在这个分支上开发新功能

代码 review

// 当 ddz 开发完毕
//  review 实现方式 
//  GitHub 的 pull request   (merge request)
//  小领导  在 github 的项目进行配置
//  setting -- >  Branches 
//  选中 requier pull request 然后再下面的选项 选中 一个人 其它的选项先不用处理

// 小弟提交
// 在项目的 下方 有个  New pull request  按钮,点击
// 选中  base:dev <= compare:ddz   // 在下面有标题框和描述信息框  自己输入信息即可

// 小领导会接收到 pull request 请求
// 领导可以通过两种方式,检查代码,一:在网站上检查;二、pull 代码到本地,在本地使用工具检查。
// 领导检查完代码,点击 perge pull request , 
// 然后勾中提示框,在点击 Comfirm merge , 完成 review 操作 
// 此时查看 dev ,就是 review 之后的 dev 了

fork 源代码

// 如果想要copy 别人的源代码
// 点击别人的仓库
// 点击右上角的 Fork 按钮,将别人的源代码 copy 到自己的远程仓库
// 然后就可以在本地 git clone 这个源代码了

// 如果发现别人源代码的错误  
// 可以 copy 到本地
// 修复完之后
// 申请发送给原作者  (pull request)

配置文件存放位置

// 例 git config --local user.name '李世粱'
// 第一个配置文件 --local 项目配置文件 : 当前项目下的 /./.git/config
// 第二个配置文件 --global 全局配置文件 /user/.gitconfig
// 第三个配置文件 --system 系统配置文件 /etc/.gitconfig     //需要 root 权限
// 优先级 1 > 2 > 3

// 应用场景
// 1 用户名 密码
// 2 bc3  (解决冲突软件的配置)

git 免密登录

URL 体现

// 原来的URL
https://github.com/lishiliang666/dbhot
// 修改后的URL
https://用户名:密码@github.com/lishiliang666/dbhot
// 在推送仓库时,使用
git remote add origin https://用户名:密码@github.com/lishiliang666/dbhot
// 在配置文件种修改
// 下次再创建项目 可以在项目名后面加 .git   例 dbhot.git

SSH ***

// 1 在自己电脑上生成公钥和私钥  ( C:\Users\~\.ssh\id_rsa.pub )  ~ 就是 user
// 打开命令窗口 输入 ssh-keygen    回车 回车  
// 注意:当要生成新的公钥时,先删除原来的公钥,在上面的第二个回车处,输入 y 加三个空格 在点击回车
// id_rsa.pub 公钥  id_rsa 私钥
// 打开 id_rsa.pub    copy 里面的内容

// 2 在 github 上 配置公钥
// 打开 github
// 点击右上角头像
// 点击 Settings
// 点击 SSH and GPG keys
// 点击 New SSH key 按钮
// 将 id_rsa.pub 里的内容 复制到 key 的内容框中
// 在 title 框 输入 我的电脑
// 点击 Add SHH key
// 在 git 本地文件配置 ssh 地址  
// [email protected]:lishiliang666/dbhot.git  
// 点击自己的仓库,点击右边的下载按钮,将 https 切换到 ssh 即可看到该 ssh 地址 

git 自动管理凭证

// window 不知道在哪

git 忽略文件

// 如果在项目中,有些文件,你不希望被 git 管理
// 在当前项目下 创建 .gitignore 文件  
// 将不想被管理的文件名,写入 .gitignore 文件里
// 例 a.h   单个文件
//    *.h   所有以 .h 为后缀的文件
//    .gitignore  这个文件本身
//    files/    files 文件和其下面的所有文件
//    !a.h   将 a.h 排除    
//    *.h  !a.h  就是除了 a.h 外的所有以 .h 为后缀的文件,将不在被管理
//    可以将 files 文件下的某个文件 加上 ! 让其重新被管理
//    可以去 github 查找 gitignore  人家已经把每种服务器应该要屏蔽的文件类型帮我们列出来了
//    项目中一定要加 gitignore

git 任务管理

issues 文档以及任务管理

wiki 项目文档说明

在 git 使用中出现的错误

一 在连接远程仓库时 ,出现错误

$ git remote add origin [email protected]:lishiliang666/Typora.git
fatal: remote origin already exists.
// 致命:远程来源已经存在。   origin 别名以存在

解决方案 删除该别名 在重新创建

git remote rm origin    // 删除
git remote add origin [email protected]:lishiliang666/Typora.git      // ok

// *.h !a.h 就是除了 a.h 外的所有以 .h 为后缀的文件,将不在被管理
// 可以将 files 文件下的某个文件 加上 ! 让其重新被管理
// 可以去 github 查找 gitignore 人家已经把每种服务器应该要屏蔽的文件类型帮我们列出来了
// 项目中一定要加 gitignore


## git 任务管理

### issues  文档以及任务管理

### wiki 项目文档说明





# 在 git 使用中出现的错误

### 一     在连接远程仓库时 ,出现错误

```shell
$ git remote add origin [email protected]:lishiliang666/Typora.git
fatal: remote origin already exists.
// 致命:远程来源已经存在。   origin 别名以存在

解决方案 删除该别名 在重新创建

git remote rm origin    // 删除
git remote add origin [email protected]:lishiliang666/Typora.git      // ok

你可能感兴趣的:(git)