关于git的絮絮念

1.git令牌方式添加远程仓库

当出现remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.问题时,就是告诉你用户名密码方式早在2021年8月13日已行不通了,需要使用令牌。

需要通过settings–Developer settings–Personal access tokens–Tokens(classic)创建一个token,为方便起见,可以设为永不过期,选项全选,生成token后保存好

使用token添加远程仓库:

1
git remote add origin https://<your_token>@github.com/<USERNAME>/<REPO>.git
  • 删除本地的远程仓库别名:git remote rm origin (origin是远程仓库名)
  • 查看本地的远程仓库别名:git remote -v
  • 修改既有远程仓库的地址 :git remote set-url origin …

2.设置签名

签名是对提交的标识,表示这次提交是谁干的,和你需要登录的github或是远程的某个代码仓库一毛钱关系都没有

签名分为用户级别签名和项目级别签名:

  • 用户级别签名使用 git config --global:,作用于用户范围,是全局设置
    • 设置用户名:git config --global user.name <具体的名字>
    • 设置邮箱:git config --global user.email <一个邮箱,真不真实都无所谓>
    • 用户级别签名实质就是在用户家目录创建了个.gitconfig文件
  • 项目级别签名,在项目目录下设置,不加–global就是了,仅作用于本仓库
  • 优先级:
    • 就近原则,两者都设置时采用项目级别签名
    • 没有设置项目级别签名的情况下,默认就会使用用户级别签名
    • 两者都不设置是不允许的
    • 简便起见,一般设置一个用户级别的签名就行了

3.查看历史记录的N种方式

3.1 git log

最完整的形式,会显示全部的提交信息及全部的hash值

3.2 git log –pretty=oneline

相较git log,会比较简洁,每个提交仅一行信息,会显示全部的hash值

3.3 git log –oneline

更加简洁,相较 git log –pretty=oneline ,hash值只显示一部分

3.4 git reflog

与 git log –oneline 相似,但多了从当前指针回退到某个提交需要移动的步数,对前进后退很有用

3.5 git log 的多屏显示方式,与linux相似

空格 向下翻页

b 向上翻页

q 退出

4.前进后退历史版本

前进后退历史版本的实质就是移动指针,这个指针的名字就是HEAD,操作指针就是 git reset ,有三种方式:

4.1 基于索引值,推荐的方式

git reset --hard <索引值(即某次提交的部分hash值)>

4.2 使用^符号,只能后退不能前进

git reset --hard HEAD^可以将当前指针回退一步,需要回退既不就要用几个^

4.3 使用~符号,只能后退不能前进

git reset --hard HEAD~3 可以将指针回退3步,需要回退几步就在~后加几

4.4 –soft、 –mixed 、–hard 三者的区别
  • –soft : 只移动本地仓库中的指针,但不刷新暂存区与工作区
  • –mixed:移动本地仓库中的指针并刷新暂存区,但不刷新工作区
  • –hard: 移动本地仓库中的指针,暂存区、工作区同步刷新

5.找回被删除文件

  • 前提:删除前,文件存在的状态已提交到了本地库(如果本地库都没有文件存在时的历史记录,是找不回的)
  • 操作:git reset –hard [指针位置]
    • 删除操作已经提交到本地库: [指针位置]为文件存在时的历史记录
    • 删除操作尚未提交到本地库: [指针位置]使用HEAD

6.比较文件差异 diff

  • git diff [文件名] :将工作区中的文件与暂存区中的文件相比较
  • git diff [本地库中的某个历史记录] [文件名]:将工作区中的文件与本地库历史记录相比较,比如:
  • git diff HEAD [文件名]:将工作区中的文件与本地库中的指针位置相比较
  • git diff HEAD^ [文件名]:将工作区中的文件与本地库中的指针的上一条记录相比较
  • git diff 不带文件名时,比较所有文件

7.分支操作

7.1查看分支

git branch -v

7.2 创建分支

git branch <分支名>

7.3 切换分支

git checkout <分支名>

7.4 合并分支
  • 第一步:切换到接受修改的分支上,比如要将别的分支合并到master,就需要首先切换到master:

    git checkout master

  • 第二步:执行merge命令:git merge <另一个分支的名字>

8. 关于git pull

git pull 实际上合并了两个操作(fetch+merge):

  • git fetch <仓库别名> <分支名> 先把远程仓库中的更新取回到本地,此时并没有修改本地工作区的文件
  • 如果想看一下取回了什么,可以git checkout <仓库别名>/<分支名>切换过去进行查看,看完后再git checkout master`切回去
  • git merge <仓库别名>/<分支名>或是git reset –hard <仓库别名>/<分支名>` 把取回的远程更新合并到本地
  • 所以,为谨慎起见,可以不一次性执行git pull,而是先 git fetch 之后,检查没问题再合并

9.团队内部协作的流程

  1. 项目负责人创建本地库,远程库(比如github)
  2. 项目组内的参与成员将远程库 git clone到本地,新建一个分支,添加功能后提交,注意:这时是提交不了的,需要项目负责人授权,具体方法:进入远程项目仓库–settings–collabrators–add people ,将团队成员添加进来
  3. 新建的分支提交到远程后,远程代码仓库会自动新建一个分支
  4. 项目负责人git pull ,会将远程的新建分支拉取到本地, 切换分支审查代码
  5. 检查无误后进行合并

10.跨团队协作流程

  1. 项目负责人创建本地库,远程库(比如github)
  2. 团队外的人员将远程库fork成为自己的远程库,这时可以把它当做自己的项目一样完善功能,进一步开发
  3. 团队外的人员开发结束,向项目负责人 pull request ,项目负责人审核后决定是否merge