Git

First Project:)being confused and embrassed… luckily no one is staring at you but willing to help,as long as you try to find and explain a bug,try debugging、、

Git Bash

  • 分布式版本控制工具 git:没有“中央服务器”,每个人的电脑上都是一个完整的版本库(区别于集中式版本库管理系统如 svn)。
  • Git Bash:Git提供的命令行工具,可运行linux命令 cd、ls、touch…
    1
    git config --list                         # 查看配置
  • 配置 Git 的全局用户信息,这些信息在你提交代码到 Git 仓库时会被记录下来,用于标识提交代码的作者信息。
    1
    2
    git config --global user.name "xx"        # 配置 user.name caifeng
    git config --global user.email "xx" # 配置 user.email 1908454905@qq.com

Github

  • leo710aka @qq.com xxxxxxx
  • 使用 SSH 密钥连接 GitHub:如果没有的话,使用???以下命令在本地生成 SSH 密钥
    1
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    生成 SSH 密钥后,将 ~/.ssh/id_rsa.pub(公钥)的内容添加到 GitHub 账号的 SSH 密钥设置中。
  • 使用 HTTPS 认证连接 GitHub:在 GitHub 上克隆仓库时,使用 HTTPS 链接,然后在推送更改时,会提示输入 GitHub 账号的用户名和密码,或者使用个人访问令牌(Personal Access Token)代替账号密码。
  • 访问令牌(Access Token)是一种用于通过API进行身份验证的方式。
    • 创建访问令牌:1. 登录到你的GitHub帐户。 2. 点击右上角的头像,选择 “Settings”。 3. 在左侧导航栏中选择 “Developer settings”。 4. 点击 “Personal access tokens”。 5. 点击 “Generate token”。 6. 提供一个描述,选择需要的权限(scope),然后点击 “Generate token”。 7. 复制生成的访问令牌。请注意,生成后会显示一次,如果忘记了,需要重新生成。
    • 使用访问令牌:可以通过多种方式使用,例如在命令行中、在脚本中或者在应用程序中。
    • Token和SSH密钥是两种不同的身份验证机制,用于在GitHub或其他版本控制系统中进行身份验证。存在一些区别。
      用途不同: 访问令牌用于API身份验证,而SSH密钥用于远程仓库的SSH访问。
      获取方式不同: 访问令牌通过GitHub设置生成,而SSH密钥需要用户生成并添加到GitHub帐户。
      身份验证方式不同: 访问令牌通过HTTP标头进行身份验证,而SSH密钥使用SSH协议进行本地身份验证。
      适用场景不同: 访问令牌适用于与GitHub API进行交互,而SSH密钥适用于直接使用Git与远程仓库进行交互。

Git 指令

  1. clone (克隆):从远程仓库中克隆代码到本地仓库。会下载远程仓库的所有分支的引用,但只会检出[chekout]默认分支到本地。
  2. checkout (检出) :从本地仓库中检出一个仓库分支然后进行修订
  3. add (添加):在提交前先将代码提交到暂存区
  4. commit (提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch (抓取): 从远程库抓取到本地仓库。这会更新所有远程分支的引用信息,但不会自动合并这些更新到本地分支。
  6. merge(合并): 将指定的分支合并到当前分支。
  7. pull(拉取) : 相当于fetch+merge,获取最新的远程提交,但只合并当前检出的本地分支与其对应的远程分支,然后放到到工作区。
  8. push (推送) :修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

本地仓库

  • 要使用Git对我们的代码进行版本控制,首先需要创建本地仓库
    (1) 在电脑的任意位置创建一个空目录(文件夹) 作为我们的本地Git仓库
    (2) 进入这个目录中,右键打开Git bash
    (3) 执行命令git init
    (4) 如果创建成功后可在文件夹下看到隐藏的.git目录。
  • 新建仓库中的文件,其状态都是未被跟踪的(未纳入版本管理)
    git add <name> / git add .:跟踪一个/所有文件或目录的状态,将其纳入版本管理(即暂存?),记录其状态或内容变化
    git rm <name>:删除文件
    git rm --cache <name>:保留文件但不再跟踪
  • 添加,提交,推送:在IDEA中,点击Git提交并推送,选择提交、添加信息、修改远程仓库的分支(默认origin:main),推送。
    1
    2
    3
    4
    5
    6
    $ git status                                       # 查看当前状态(红色的字体显示的是修改的文件
    $ git add 单个文件名|通配符(. 添加所有修改) # 添加工作区代码到本地git暂存区
    $ git commit -m "提交的信息" # 提交暂存区代码到本地git仓库(生成一个版本)
    $ git log # 查看提交日志信息(head指向当前操作的分支)
    $ git push <远程仓库名> <本地分支名> # 推送本地代码到远程仓库
    $ git push <远程仓库名> <本地分支名>:<远程分支名> # 将指定的本地分支推送到远程仓库的指定分支

远程仓库

  • 上传本地仓库项目到远程
    本地git bash生成ssh公钥,添加到gitee中,本地验证,添加远程仓库
    1
    2
    3
    4
    5
    6
    $ ssh-keygen -t rsa                                       # 生成ssh密钥
    $ cat ~/.ssh/id_rsa.pub # 查看密钥
    $ ssh -T git@gitee.com # 验证
    $ git remote add origin git@gitee.com:leo710aka/test.git # 添加远程仓库名为origin(别名),加ssh地址
    $ git remote -v # 检查远程仓库配置是否正确
    $ git push origin master # 完成添加、提交后,将本地master分支推送至远程origin仓库
    或者直接在idea中,对一个项目文件添加、提交后,直接在idea中git remote,使用github账号密码进行远程仓库的连接,然后推送。(连接远程仓库,要么使用ssh密钥,要么用github账号密码。)
  • 添加远程仓库项目到本地
    1
    2
    $ git clone <远程仓库地址>                 # 克隆远程仓库到本地(默认分支master)
    $ git clone -b <分支名> <远程仓库地址> # 克隆指定分支(如develop)
    也可以先从远程仓库git clone下来一个项目,完成修改后对项目文件添加、提交,在推送到远程仓库时,再进行 ssh密钥/github账号密码 的验证。

分支

  • 实际开发新功能,是在develop分支上创建feature分支,完成后合并到develop分支(部门开发分支)上,经测试,最后合并到master分支(线上分支,主分支,项目正在上线的分支)
    1
    2
    3
    4
    5
    6
    7
    8
    $ git branch                  # 查看本地所有的分支,当前激活的分支会在列表中以星号(*)标识。
    $ git branch -r # 查看远程仓库的分支
    $ git branch -a # 查看所有分支,包括本地分支和远程分支。
    $ git branch caifeng # 从当前分支上新建分支
    $ git checkout caifeng # 切换分支
    $ git checkout -b caifeng # 创建(若不存在)并切换分支
    $ git checkout -d caifeng # 删除分支(-D 强制删除)
    $ git merge <分支名> # 先切换回如master分支上,将其他分支上的提交合并到master上
  • 分支合并
    1
    2
    3
    $ git merge [remote name] [branch name]   
    $ git log --merge # 显示合并冲突的提交日志
    $ git log --graph --oneline --all # 可视化分支和合并历史,以简化理解合并的情况
  • 更新项目
    1
    2
    $ git fetch [remote name] [branch name]   # 抓取仓库里的更新到本地,不会进行合并
    $ git pull [remote name] [branch name] # 拉取远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
    在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到玩程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支
    或直接在IDEA里面选择分支pull(Git拉取),克隆/更新后记得修改配置文件为测试/本地(如果有)。
  • 冲突:当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决步骤、、
    1.处理文件中冲突的地方
    2.将解决完冲突的文件加入暂存区(add)
    3,提交到仓库(commit)

经典Git流模型

其他操作

  • 贮藏代码:当前代码没写完,要切换分支时,必须先提交当前代码或贮藏
    1
    $ git stash    
  • 版本回退
    1
    2
    $ git reset --hard <提交id>    # 通过提交id切换版本
    $ git reflog # 查看历史操作(已清除提交日志、版本切换日志。。。
  • 分支变基:将一系列的提交从一个分支上 “移动” 到另一个分支的起点,并将它们重新应用(或重新播放)到目标分支上。
    1
    $ git rebase   # 可以让提交历史更线性、更简洁