git操作笔记

2024年4月5日 · 1244

本地Git图解

0.jpeg

基础操作

创建版本库

$ git init

把文件添加到仓库

$ git add <filename>

把文件提交到仓库

$ git commit -m <message>

git commit 只负责把暂存区的修改提交

查看仓库当前状态

$ git status

管理修改

查看对文件的修改(尚未添加和提交的文件)

$ git diff
$ git diff <filename>
$ git diff HEAD -- readme.txt // 查看工作区和版本库里面最新版本的区别

查看仓库所有提交记录

$ git log
$ git log --pretty=oneline // 更精简的记录

回退版本

$ git reset --hard HEAD^  // ^表示上一个版本
$ git reset --hard HEAD~100 // 回退前100个版本
$ git reset --hard 1094a // 回退到具体的版本号(没必要全写)

查看执行过的命令

$ git reflog

撤销修改

撤销工作区的修改

$ git checkout -- <filename> // 旧的指令

$ git restore <filename>  // 新的指令√

撤销暂存区的修改

$ git checkout -- <filename> // 旧的指令:撤销将文件添加到暂存区后的所有修改
$ git reset HEAD <filename>  // 旧的指令:从暂存区撤回到工作区

$ git restore --staged <filename>  // 新的指令:从暂存区撤回到工作区

删除文件

$ git rm <filename>  // 从版本库删除文件
$ git checkout -- <filename> // 在工作区一键还原到暂存区的版本

☁️远程仓库操作

1.添加ssh密钥,复制id_rsa.pub到github

$ ssh-keygen -t rsa -C "youremail@example.com"

2.github创建仓库

关联远程仓库

$ git remote add origin git@github.com:<username>/<repository>.git

推送到远程仓库

$ git push -u origin master  // -u可以把本地的master分支和远程的master分支关联起来
$ git push origin master  // 推送到指定的远程仓库分支
$ git push // 推送到关联的远程仓库的分支

查看关联的远程仓库的信息

$ git remote -v

删除远程仓库绑定

$ git remote rm <name>

克隆远程仓库

$ git clone <link>

🚀多人协作

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

分支管理

Git鼓励大量使用分支

使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

创建、合并、删除、查看分支

原仓库:

0.png

$ git checkout -b dev  // 创建并切换到dev分支,等效于下面两条命令
$ git branch dev
$ git checkout dev

$ git switch -c dev   // (新指令)创建并切换到dev分支,语义化更好
$ git switch master

l.png

做一些提交后:

0-16417784920703.png

$ git checkout master
$ git merge dev  // 合并指定分支到当前分支

0-16417785677965.png

$ git branch -d dev  // 删除分支
$ git branch -D <name> // 删除一个没有被合并过的分支
$ git branch   // 查看所有分支

0-16417786742187.png

解决冲突

当遇到git merge出现冲突时,需要手动修改文件解决冲突,然后再提交

$ git log --graph  // 查看分支合并图

禁用Fast forward模式

$ git merge --no-ff -m "merge with no-ff" dev // 用普通模式合并,可以在提交历史上看到曾经合并过

0-16417863169429.png

团队开发的分支示意图:

0-164178637570211.png

暂存工作环境

$ git stash   // 暂存工作环境
$ git stash pop  // 回到工作环境

复制提交到当前分支

$ git cherry-pick <commit>

Rebase变基

$ git rebase // 把本地未push的分叉提交历史整理成直线

标签管理

标签就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起

创建、查看标签

$ git tag <tagname> <commit> // 根据提交创建标签,默认是HEAD
$ git tag -a <tagname> -m "blablabla..." // 创建标签时指定信息

$ git tag  // 查看所有标签
$ git show <tagname>  // 查看标签信息

操作标签

$ git push origin <tagname>  // 推送一个本地标签;

$ git push origin --tags  // 推送全部未推送过的本地标签;

$ git tag -d <tagname>   // 删除一个本地标签;

$ git push origin :refs/tags/<tagname> // 删除一个远程标签。

Git配置

git显示颜色

$ git config --global color.ui true

配置别名

$ git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.sw switch
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
$ git config --global alias.unstage 'reset HEAD'