git和github的使用教程

本文将介绍如何使用git和github。

一、关于git版本控制系统
1.1 版本控制系统
  1. 含义:版本控制系统(Version Control System,VCS)是一种软件,可以帮助软件团队的开发人员协同工作,并存档他们工作的完整历史记录

  2. 分类:img

1.2 Git

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理,是现在最流行的版本控制系统。

二、下载安装Git
2.1 下载git

【下载地址】: https://git-scm.com/download

下载系统对应版本即可。windows 64位系统下载如下版本:

image-20231006231322553
2.2 点击安装==>Next
image-20231006232524128

后面几乎都是一路next,嫌麻烦可以跳过这一part,安装完成后直接进入第三部分

2.3 选择组件
  • 可选:添加一个桌面图标
  • 可选:在windows终端添加一个git选项
image-20231006232650948
2.4 选择Git的默认编辑器
image-20231006233045532
2.5 选择执行git init命令时创建的分支名
  • 默认即可
image-20231006233212287
2.6 设置环境变量
  • 默认即可
image-20231006233413263
2.8 选择SSH连接工具
  • 默认即可
image-20231006233504694
2.9 选择在加密连接时使用的证书
  • 默认即可
image-20231006233603249
2.10 配置行尾符号转换
  • 默认即可
image-20231006233649909
2.11 配置终端模拟器以与Git Bash一起使用
  • 默认也可

  • 选项一:“使用 MinTTY( MSYS2 的默认终端)”

    • 优点:窗口可调整大小,非矩形文本选择和显示 Unicode 字体。
  • 选项二:“使用 Windows 的默认控制台窗口”。Git 将使用 Windows 的默认控制台窗口cmd.exe

    • 优点:可以与 Windows 控制台程序(如交互式 Python 或 node.js )一起使用
    • 缺点:默认的回滚非常有限,需要配置 Unicode 字体才能正确显示非 ASCII 字符,并且在 Windows 10 之前,其窗口不能自由调整大小,并且只允许矩形文本选择
image-20231006233703962
2.12 使用git pull命令时默认的模式
  • 默认即可
image-20231006234014039
2.13 是否启用 credential helper 登录凭证管理助手
  • 默认即可
image-20231006234046976
2.14 配置额外的选项
  • 默认即可
image-20231006234141332
2.15 是否启用新的实验功能。点击install
  • 默认不选择,如果想尝试新功能,官网查阅资料即可
image-20231006234151855
2.16 开始安装,等待片刻,点击finish
image-20231006234446935

三、连接Git和Github

3.1 进入Git Bash

在桌面右键鼠标 ==> 点击 显示更多选项 ==> Open Git Bash here

image-20231006234432693 image-20231006234633065 image-20231006234744546
3.2 配置 Git 用户信息
  • 用户名:github用户名
  • 邮箱:github账户邮箱
  • 注:引号也要加上
$ git config --global user.name "用户名"
$ git config --global user.email "邮箱"
3.3 检查是否配置成功

可以使用如下两条命令查看Git用户信息

  • 获取当前用户名
$ git config user.name
  • 获取当前邮箱
$ git config user.email
3.4 配置ssh连接

基于GIt的代码托管平台例如Github,Gitlab,Gitee等,都提供了基于 SSH 协议的 Git 服务,使用SSH公钥可以让你的电脑和Git远程仓库建立安全连接。

3.4.1 windows系统

在git bash中输入如下命令生成SSH KEY

  • 引号内的内容可以随意填写。直接把下面的命令复制过去,不做任何修改也行。
$ ssh-keygen -t rsa -C "XXXXX.com"
  • 这里显示需要输入三处内容,直接全部输入回车即可!

    image-20231213112246760
  • 进入C:/users/用户名/.ssh目录。发现其中多了两个文件:id_rsaid_rsa.pub

    image-20231006235724437
  • 用记事本打开id_rsa.pub文件

    image-20231006235842982
  • id_rsa.pub的内容复制到Github的SSH keys当中

    • 进入githubsetting界面

    • 点击左侧的SSH and GPG keys

    • 点击New SSH key

    • 将刚刚从id_rsa.pub中复制的内容粘贴到Github的Key中,设置title,点击Add SSH key

      • Title可以自己填写
      image-20231007000250797
3.4.2 Linux系统
  • Ubuntu环境下安装ssh

    sudo apt install ssh
    
  • 查看主目录下有没有**.ssh**这个隐藏文件

    ls -ah
    
  • 若没有,则生成SSH KEY(引号内的内容可以随意填写)

    ssh-keygen -t rsa -C "XXXXX.com"
    
  • 进入 /root/.ssh目录,查看id_rsaid_rsa.pub文件

  • id_rsa.pub的内容复制到Github的SSH keys当中(同windows)

四、常用 git 命令

image-20231007005114934
4.1 git add将工作区的修改添加到本地暂存区
  • 添加所有修改
$ git add .
  • 添加对某个文件的修改
$ git add <文件名>
4.2 git commit将暂存区的修改提交到本地版本库
  • 引号中需要填写此次修改的描述
$ git commit -m "添加修改信息"
4.3 git push将本地版本库中的修改提交到github远程仓库中
$ git push
4.5 git status查看文件的状态
$ git status
4.6 git branch管理分支
  • 列出所有分支
$ git branch
  • 创建新的分支
$ git branch <branch_name>
  • 删除分支
$ git branch -d <branch_name>
4.7 git checkout切换分支
$ git checkout <branch_name>
4.8 从远程库中克隆文件到本地文件夹
$ git clone <url> [directory]
  • url可以通过ssh、http获取
    • 进入项目==>Code ==> SSH/Http ==> 复制即可
  • 如果不填写directory就是默认在当前文件夹存储克隆的文件
image-20231007002558235
4.9 git fetch
  • 将某个远程主机的更新全部取回本地
$ git fetch <远程主机名>
  • 只拉取特定分支的更新
$ git fetch <远程主机名> <分支名> //注意之间有空格
  • 查看远程主机分支的最新状态
$ git log -p FETCH_HEAD
4.10 git pull

将远程主机的某个分支的更新取回,并与本地指定的分支合并。

相当于git fetch+git merge。

$ git pull <远程主机名> <远程分支名>:<本地分支名>

五、其他 git 命令

5.1 创建本地仓库
5.1.1 在本地电脑上选择一个合适的位置创建一个空目录作为仓库
$ mkdir learngit
5.1.2 进入目录,点击右键打开Git bash窗口,执行git init 将其变成Git可以管理的仓库
$ git init
  • 同时可以发现当前目录下多了一个.git的目录(一般是隐藏文件),这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件
5.2 远程仓库
5.2.1 在github上创建一个仓库,比如名为Android
5.2.2 git remote关联远程库

远程库的名字就是origin

$ git remote add <shortname> <url>
  • 举例:
$ git remote add origin [email protected]:fograinwater/Android.git
//$ git remote add origin https://github.com/tugenhua0707/testgit
5.2.3 git push把当前main / master分支推送到远程库
$ git push -u <short_name> <your_branch_name>

举例:

$ git push origin main:main
$ git push –u(第一次要用-u 以后不需要) origin master//把当前master分支推送到远程库

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

5.2.4 从远程库中克隆文件
  • 可以使用ssh
$ git clone [email protected]:fograinwater/Android.git
  • 也可以使用http
$ git clone https://github.com/fograinwater/Android.git
5.2.5 查看远程库信息
$ git remote -v
5.2.6 删除远程库
$ git remote rm <name>

“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库

5.2.7 克隆远程库到本地库
$ git clone [email protected]:fograinwater/Android.git
5.3 分支管理(简)
$ git branch //查看本地所有分支 

$ git branch -r //查看远程所有分支

$ git branch -a //查看本地和远程的所有分支

$ git branch <branchname> //新建分支

$ git branch -d <branchname> //删除本地分支

$ git branch -d -r <branchname> //删除远程分支,删除后还需推送到服务器
$ git push origin:<branchname>  //删除后推送至服务器

$ git branch -m <oldbranch> <newbranch> //重命名本地分支
5.4 其他
5.4.1 查看文件修改详情

git diff <filename>

5.4.2 显示提交日志

git log

  • 只显示简要的日志信息

git log --pretty=oneline

(前面显示的一串数字是commit id

5.4.3 把文件回退到历史版本
  • 利用HEAD回退

    HEAD:当前版本

    HEAD^:上一个版本

    HEAD^^:上上个版本

    HEAD~100:第前100个版本

    如回退到上一个版本:

    git -reset --hard HEAD^

  • 利用commit id 回退

    git reset --hard <commit id>(一般而言commit id只需要写出前几位即可,git可以自动查找)

5.4.4 显示可引用的历史版本记录

git reflog

可引用历史提交版本,什么意思?

  • 使用git log命令只可以查看到HEAD指针及其之前的版本信息,如果版本发生过回退操作,则可能会出现,HEAD指针之后仍存在历史提交版本的情况,而这些提交版本信息通过git log命令是看不到的。

    【即:git log命令是显示当前的HEAD和它的祖先,递归是沿着当前指针的父亲,父亲的父亲,……,这样的原则】

  • 我们可以通过使用git reflog命令,就可查看到所有历史版本信息。由于查看所有历史版本信息的目的,大多是为了进行版本回退或恢复操作所使用,从中找到所需的commit索引,所以该命令被命名为reflog(reference log),即:引用日志。

  • git log命令与git reflog命令作用范围示意图:

img
  • reflog并不是Git仓库的一部分,它单独存储,它纯属是本地的

  • git reflog命令显示的内容,应该是存储在.git/logs/HEAD文件中,或者是.git/logs/refs目录中的文件,也就是说git reflog命令中保留了从clone仓库开始,用户所有在本地库中的操作。

5.4.5 把文件在工作区的修改全部撤销

(在工作区内误改、误删了文件)

git checkout -- readme.txt

5.4.6 把暂存区的修改撤销掉(unstage),重新放回工作区

(在工作区内误改了文件,并add进了缓存区)

git reset HEAD <file>

然后根据步骤6将工作区中的修改删除

六、工作区与暂存区

image-20230521145914378 image-20230521143744413 img
  1. 工作区:当前操作的目录(文件夹)
  2. 版本库:.git目录
  • 暂存区(stage/index):存放add进来的所有修改
  • HEAD
  • master

git commit只负责把暂存区的修改提交了,如果某些修改没有通过git add加入到暂存区中,则无法通过git commit提交到本地库中

七、分支管理

1.查看分支

git branch

2.创建分支

git branch <name>

3.切换分支

git checkout <name>或者git switch <name>

4.创建+切换分支

git checkout -b <name>或者git switch -c <name>

5.合并某分支到当前分支

git merge <name>

  • 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成
  • 解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交
  • git log --graph命令可以看到分支合并图
  • 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
6.删除分支

git branch -d <name>

7.将当前工作区(分支)的修改储藏来实现清空工作区

git stash

8.开发一个新feature,最好新建一个分支
  • 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除
9.多人协作
  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

九、标签管理

标签实际上是版本库的快照,跟某个commit绑在一起

标签的创建和删除都是瞬间完成的

默认标签是打在新提交的commit上的

1.创建标签
  • 创建普通标签

    • 先切换到需要打标签的分支上

      git checkout master

    • 打标签

      git tag <tagname>

  • 创建带有说明的标签

    git tag -a <tagname> -m <说明文字>

  • 在历史commit上创建标签

    git tag <name> <commit id>

2.查看所有标签

git tag

3.查看标签信息

git show <tagname>

4.删除标签

git tag -d <tagname>

5.将标签push到远程仓库
  • push单个标签

    git push origin <tagname>

  • push所有尚未推送到远程的本地标签

    git push origin --tags

6.删除远程仓库中的标签

git push origin :refs/tags/<tagname>

猜你喜欢

转载自blog.csdn.net/m0_63428773/article/details/134970596