git使用及其常见问题

在这里插入图片描述

准备工作

版本管理软件

  • 作用
    • 记录代码的版本,可以随时回退
    • 实现多人协作,可以很轻松的合并代码
  • 分类
    • 集中式,典型代表 SVN
    • 分布式,典型代表 Git

安装

配置用户名和邮箱

Git软件在工作的时候,需要知道你是谁?所以需要设置一个用户名和邮箱。

这个用户名和邮箱,最好使用你的github账号或码云账号,当然随便填也可以。

具体做法:

  1. 任何文件夹,空白处,右键 --> Git Bash Here
  2. 依次执行下面两行代码
# --global 会将配置项保存到用户配置
$ git config --global user.name "xxx"
$ git config --global user.email "xxx"

$ 不是命令命令的一部分,你只需要从 “git config …” 这里开始复制(或抄写)

Git初始化

目的是学习,所以,随便创建一个项目文件夹,打开项目文件夹

注意:一定要在项目文件夹,右键–>Git Bash Here。

至于项目中有没有文件无所谓。

在这里插入图片描述

执行下面的命令:

# 初始化,表示使用Git管理我们的项目。这个命令只需要执行一次(注意空格)
git init

  • 执行 git init 命令之后,会在项目文件夹中生成一个隐藏的 .git 文件夹

  • Git 管理项目的每一次记录,都在 .git 文件夹里面保存着。所以这个文件夹不能删除

  • 对于一个项目来说,git init 只需要执行一次

  • 没有初始化,就使用Git将会报如下错误

    fatal: not a git repository (or any of the parent directories): .git
    

初体验

初始化之后,就可以使用Git来管理你的项目了。

  • 假设我们开始开发了,项目中新增了很多文件,如上图。

  • 用Git保存项目中的代码

    git add .
    git commit -m '提交说明(此次提交了什么代码,功能是什么,其实就是注释)'
    
  • 新增、删除或修改了代码(随便新增、删除或修改点代码),用Git保存修改后的代码

    git add .
    git commit -m '提交说明'
    
  • 新增、删除或修改了代码(随便新增、删除或修改点代码),用Git保存修改后的代码

    git add .
    git commit -m '提交说明'
    
  • 查看提交日志

    # 查看详细日志记录
    git log
    
    # 查看简略版的记录
    git log --oneline
    
    # 清屏
    clear
    
  • 切换版本,在历史版本中穿梭

    # 上述查看提交日志的时候,会看到每次提交的版本号,然后执行下面的命令即可完成版本穿梭
    git checkout 版本号
    
    # 如果只回退一个文件
    git checkout 版本号 文件名
    
  • 回到最后的提交状态

git checkout master

> 穿梭到历史的某个版本后,打开你的代码看看,是不是很神奇呢?
  • 易错点
    • 请注意,每个词之间有空格
    • -m 是连在一起的
    • “提交说明” 是字符串,要加引号,注意别用中文的引号。

三个区域

下面三个区域,是Git虚拟的区域,看不到,摸不着。

  • 工作区
    • 工作区,指的是使用Git管理后的文件,这些文件显示在磁盘上,供我们使用或修改的区域。所以,粗略的说,项目文件夹就是工作区。
  • 暂存区域
    • 执行 git add .之后,文件由工作区,添加到了暂存区。 暂存区保存了下次将提交的文件列表信息。
  • Git 仓库区、本地仓库
    • 执行 git commit -m '提交说明' 之后,代码会被提交到仓库区。仓库区是 Git 中最重要的部分,代码只有提交到仓库,才会形成一次历史记录,即才会形成一个版本。

在这里插入图片描述

工作区新建的文件和Git没有任何关系;文件被添加到暂存区,才叫做被Git管理过

记录每次更新到仓库

添加文件到暂存区

新文件,只有添加到暂存区,才叫做被Git管理。否则和Git没什么关系,即使文件在项目文件夹。

# 添加指定文件到暂存区
$ git add 文件名

# 以空格隔开可以一次 add 多个文件
$ git add [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录
$ git add [dir] [file] [dir] [file] [file] ...

# 添加当前目录的所有文件到暂存区,包括子目录
$ git add .

默认空文件夹,是不能添加,不能提交的

提交文件到仓库

提交到仓库的文件,是暂存区中的文件。

# 提交暂存区到仓库区
$ git commit -m [message]

# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]

# 提交工作区和暂存区自上次commit之后的变化,直接到仓库区。
# 新文件,从未被Git管理过,是不能直接提交到仓库区的
$ git commit -a -m "提交日志"

在这里插入图片描述

撤销操作

撤销操作,只能恢复暂存区或工作区,与最近一次提交的代码一致。

# 恢复暂存区的指定文件到工作区
git checkout [file]

# 恢复暂存区的所有文件到工作区
git checkout .

# 恢复某个commit的指定文件到暂存区和工作区
git checkout [commit版本号] [file]

# 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变
git reset [file]

# 重置暂存区与工作区,与上一次commit保持一致。该命令后不能加文件或文件夹
git reset --hard

在这里插入图片描述

回退到历史

上述操作,只能将代码撤销到与最近一次commit保持一致。如果想回退全部或某个文件到历史版本,就需要使用 checkout 命令了。

# 首先使用git log 或 git log --oneline 查看提交记录,获取版本号。

# 回退全部文件到历史版本
git checkout 版本号

# 回退指定文件到历史的某个版本
git checkout 版本号 文件名 [文件名.....]

学习了分支之后,才会讲如何修改历史。

目前,如果回到历史,并且修改了代码,那么只能add . 然后 commit 。

远程仓库

远程仓库说明

目前,我们的操作都是一个人开发,如果涉及到多人开发呢?大家的代码如何合并到一起呢?这个时候就需要公网上的一台服务器了,大家可以把代码提交到这台服务器上,也可以从服务器上拉取所有的代码。这个公网上的服务器就叫做远程仓库。

好在这个世界上有个叫 GitHub 的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

实际上,除了GitHib,还有很多第三方远程仓库托管服务:

  • GitHub(这个网站有时很难打开)
  • 码云(gitee)(打开速度快)
  • coding
  • Gitlab

创建远程账号

配置SSH

在这里插入图片描述

在本地命令行,执行下面的命令,可以生成SSH秘钥(包含一个公钥一个私钥)

ssh-keygen -t rsa -C "你的邮箱地址"
# 执行完这个命令之后,后面有一些询问,我们直接一路回车即可

最后生成的秘钥在:

Windows:
C:\Users\用户名\.ssh

mac:
你的用户名那个文件夹中。 按shift+Commend+.  可以显示隐藏文件,然后就可以看到 .ssh文件夹了

找到 .ssh/id_rsa.pub,用vscode打开,复制里面全部的内容,配置到远程仓库

  • GitHub右上角的三角号
  • Settings
  • 左侧有 SSH and GPG keys
  • 在显示的界面中,点击右上角的 New SSH key,然后完成添加公钥操作

新建远程仓库

将本地仓库中的代码推送到远程仓库(1)

只针对远程仓库是空的仓库。

  • 创建一个空的远程仓库
  • 复制 ssh 地址
  • 终端中执行 git remote add origin ssh地址 ,表示添加远程仓库地址到本地
  • 首次推送 git push -u origin master ,刷新一下远程仓库,看看是否推送成功了

将本地仓库中的代码推送到远程仓库(2)

只针对,远程仓库一开始有东西的情况。

推送的是本地仓库的代码。工作区和暂存区的代码不会被推送到远程仓库

  • 复制远程仓库的 ssh 地址

    在这里插入图片描述

  • 本地仓库中,执行

    # 添加远程仓库地址,让我们的本地仓库和远程仓库建立关联
    # origin 可以自定义
    git remote add origin 远程仓库的ssh地址
    
  • 首次推送之前,需要先拉取远程仓库的代码(README.md)到本地

    git pull origin master --rebase
    
  • 完成首次推送

    # 如果远程没有本地的 分支,第一次推送,需要加  -u
    git push -u origin master
    
  • 后续继续开发

    # 改动了代码,先添加到暂存区
    git add .
    # 提交到本地仓库
    git commit -m 'xxxx'
    
    # 推送到远程仓库
    git push
    
    

注意事项

  • 什么时候需要先拉取,然后在推送
    • 本地的提交记录中不包含远程的提交,需要先拉取,然后在推送
  • 如果提示 “Are you sure you want to continue connecting (yes/no/[fi…])”
    • 输入yes,回车

演示了一下,如何把一个本地仓库推送到码云和github

如果你想这么做,两个仓库最好都是空的仓库。当然非空的也行。

  • 添加码云的远程仓库地址
    • git remote add origin ssh地址
  • 添加github的远程仓库地址
    • git remote add origin2 ssh地址
  • 后续推送
    • git push origin master – 表示推送到码云
    • git push origin2 master – 表示推送到github
  • 如果忘记了origin表示什么,origin2表示什么
    • 可以使用 git remote -v 来查看远端的信息

克隆远程仓库到本地

  • 实际开发中,有些时候,我们需要把一个远程仓库克隆到本地

    • 开发项目的时候,可以先创建远程仓库,然后克隆到本地,再进行开发
    • 下载别人的代码的时候,可以选择克隆
    • 多人合作开发的时候,需要克隆合作伙伴的代码到本地
  • 克隆命令

    git clone 远程仓库的ssh地址
    

    克隆,相当于下载。

  • 如果克隆的是自己的仓库,那么修改完代码,可以直接 addcommitpush

多人协作

  • 可以先创建远程仓库
  • 【可选】我先把基础的代码推送到远程仓库
  • 合作者,需要把远程仓库的代码,克隆到你的计算机中
  • 管理员邀请合作者共同来开发
  • 合作者,需要同意
  • 然后,管理员和合作者,都可以向远程仓库推送代码
    • 推送之前,必须先拉取
    • 拉取之后,如果有冲突,解决冲突,必须add、commit一次。
    • 最后推送。

如果遇到:

在这里插入图片描述

这表示,拉取远程的代码到本地,然后和本地的代码合并,出现这个窗口并非是有冲突,而是让我们写点说明来解释为什么需要合并。

解决办法有如下两个(一个简单粗暴,一个复杂):

  1. 直接关闭窗口,然后从新 git bash here
  2. 如果你真的想写点解释,点击 “i” ,进入编辑模式,按上下左右键,调整光标的位置,然后修改里面黄色的内容,注意字数不能太多。按esc,退出编辑模式,继续按 “:wq” ,表示保存,并退出的意思。

后续,可以push。

分支管理

什么是分支

随着git提交的次数越来越多,就会形成由各个版本连接而成的一条提交线。如下图:

在这里插入图片描述

由Git提交而形成的提交线,称为分支。默认的分支是主分支,叫做 master,前面的学习,一直是在 master 分支上提交。

我们也可以创建其他分支,新创建的分支,相当于是原分支的一个拷贝

实际开发中

  • 为了保证代码的安全性,不允许在主分支上进行开发
  • 需要创建其他分支,在其他分支上进行开发,这样不会影响主分支上的代码
  • 其他分支开发完成后,可以选择将其他分支代码合并到主分支上
  • 分类
    • 主分支(master / dev)
    • 主题分支(一般用于开发新功能、新的模块)
    • hotfix分支(用于解决bug)

创建其他分支

# 查看所有分支
git branch
git branch -f  # 可以查看到所有分支(包括远程分支)
# 创建分支
git branch 分支名
# 比如
git branch dev

# 切换分支到dev
git checkout dev

# 切换到master分支
git checkout master

# 也可以创建并直接切换分支
git checkout -b dev

切换分支之前,需要把当前分支的工作全部提交,否则不允许切换到其他分支。

实际开发中,鼓励多使用分支。

快进模式合并两个分支

快进模式合并

  • 两个分支A和B
  • B分支包含A分支的所有版本,在合并的时候,叫做快进模式合并。
  • 快进模式合并,相当于使用B分支的代码覆盖A分支的代码;同时版本也会更新到A分支

两个分支合并,比如把 B 分支 合并到A分支上

  • 需要先切换到A分支
  • 然后执行 git merge B ,表示把B分支的代码合并到A分支上。
# 切换到A分支
git checkout A

# 把B分支的代码合并到A分支
git merge B

合并模式合并两个分支

合并模式

  • 两个分支A和B
  • A分支有独立的提交,B分支也有独立的提交,在合并的时候,叫做合并模式的合并。
  • 合并模式,有可能会产生冲突;如果出现冲突,需要解决冲突,然后需要添加提交一次,从而完成合并。

两个分支合并,比如把 B 分支 合并到A分支上

  • 需要先切换到A分支
  • 然后执行 git merge B ,表示把B分支的代码合并到A分支上。
  • 如果看到 CONFLICT,则表示有冲突,需要打开有冲突的文件,手动解决冲突,然后添加、提交即可。
# 切换到A分支
git checkout A

# 把B分支的代码合并到A分支
git merge B

如果有冲突,会显示如下提示:

在这里插入图片描述

手动打开有冲突的文件,解决冲突,保存文件。(手动解决)

再次添加(add操作)提交(commit),即可完成合并。

其他相关命令

# 查看所有分支(本地分支)
git branch

# 查看所有分支(包括远程分支)
git branch -f

# 删除分支(需要先切换到其他分支,然后在执行删除)
git branch -d 分支名

# 创建并直接切换分支
git checkout -b dev

如果要切换分支,必须把当前分支的代码全部提交到本地仓库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值