
关于git的碎碎念
关于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.团队内部协作的流程
- 项目负责人创建本地库,远程库(比如github)
- 项目组内的参与成员将远程库 git clone到本地,新建一个分支,添加功能后提交,注意:这时是提交不了的,需要项目负责人授权,具体方法:进入远程项目仓库–settings–collabrators–add people ,将团队成员添加进来
- 新建的分支提交到远程后,远程代码仓库会自动新建一个分支
- 项目负责人git pull ,会将远程的新建分支拉取到本地, 切换分支审查代码
- 检查无误后进行合并
10.跨团队协作流程
- 项目负责人创建本地库,远程库(比如github)
- 团队外的人员将远程库fork成为自己的远程库,这时可以把它当做自己的项目一样完善功能,进一步开发
- 团队外的人员开发结束,向项目负责人 pull request ,项目负责人审核后决定是否merge