Git常用指令

136 阅读4分钟

git原理

image-20230308173100777.png

git本地仓库指令

git配置命令

git config --global user.name "myName"
git config --global user.email "myEmail@qq.com"
git config --global core.editor "'path\to\notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

其中,--global表示该配置对当前用户的所有代码仓库生效,会被写入~/.gitconfig文件中(windows系统:C:\Users\用户名\.gitconfig)。--global可以替换成其他关键字,比如:

  • --system,配置会被写入$(prefix)/etc/gitconfig文件中,整个系统层面都会生效。
  • --local,配置会被写入仓库的.git/config文件下,仅在当前仓库中生效。
  • --list,查看配置信息。git config --list

第三条示例是配置文本编辑器,后面的-multiInst等参数是notepad支持的命令,也可以使用vim等其他文本编辑器。

其他参数的使用可以参考官网,或者使用git config --help查看帮助文档。

保存修改指令

# 创建本地代码库
git init# 查看工作区状态
git status
​
# 添加文件到缓存区
git add <修改的文件>
​
# 提交修改
git commit -m "文件描述"

commit规范

用户可自己设置提交模式,后期以后提交代码的时候在模板上修改即可。例如,在 D盘下新建 git_template.txt,填入以下信息,要以utf-8无bom格式填写:

【项目 : 】【ones:1】【是否功能模块:是】【改动:】

提交方式

  1. 设置commit全局提交模板

    git config --global commit.template "D:\git_template.txt"
    
  1. 输入提交指令(执行git add之后)

    git commit
    
  1. 此时会以之前默认设置好的编辑器打开模板文件,我们按照格式修改文件,保存即可

比较差异

# 查看提交历史
git log
git log --online  # 信息更加简洁# 比较修改
git diff <file> # 查看工作区和暂存区file文件的差别
git diff --cached # 比较上一次提交和当前暂存区文件的改动
git diff <id1> <id2> # 显示两次提交的差异

恢复与回退

reset回退

主要使用git reset指令,git reset的作用是修改HEAD的位置,即将HEAD指向的位置改为为之前存在的某个版本。

git reset --soft HEAD~1
git reset --mixed HEAD~1
git reset --hard HEAD~1
  • --soft,使用当前的指令,工作区和暂存区的代码不会受到影响,但是本地仓库的代码会回滚到对应的commit-id上。
  • --mixed,使用当前的命令,工作区代码不会受到影响,但是暂存区、本地仓库区的代码已经回滚到了对应的commit-id上。
  • --hard,使用当前的命令,工作区、暂存区、本地仓库都会回滚到对应commit-id上。

revert反做

git revert是用于“反做`某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撒销版本三的提交,就可以用gitrevert命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。

git revert -n <id>

revert之后可能会有冲突,解决冲突重新提交即可。

分支操作

# 查看分支
git branch
​
# 新建分支
git branch <分支名>
​
# 新建分支并切换至分支
git checkout -b <分支名>
​
# 合并分支(若有冲突需要先解决)
git checkout <目标分支>
git merge <被合并分支名>
​
# 删除分支
git branch -d <分支名>

rebase变基分支操作

# 把指定分支的信息合并到当前分支
git rebase 分支名
​
# 遇到冲突,解决后继续执行
git rebase --continue# 终止rebase
git rebase --abort

merge和rebase的区别

假设有两个分支,提交如下:

     D---E test
    /
A---B---C---F master

merge合并后会生成一次commit提交记录,合并后的所有 commit 会按照提交时间从旧到新排列,提交树会变成:

     D--------E
    /          \
A---B---C---F---G    test , master

rebase会合并之前的commit历史,并不一定按照时间线排列。如果在test分支执行git rebase -n master,分支树会变为:

              D---E
             /
A---B---C---F

git远程仓库指令

基本指令

# 查看远程代码库
git remote -v
​
# 添加或删除远程代码库
git remote add/remove
​
# 本地分支 ---> 远程分支
git push
​
# 远程分支 ---> 本地分支(不自动合并)
git fetch
​
# 远程分支 ---> 本地分支(自动合并)
git pull  # 本质上等于 git fetch + git merge# 克隆远程仓库
git clone <仓库地址>
​
# 向服务器询问远程仓库信息
git remote show origin

SSH公钥验证

git默认使用https协议,每次pull,push的时候其实存在一定的安全漏洞。本质每次pull和push还需要输入密码(没有提示输入是因为 git 保存了你的账号密码)。使用git的ssh协议,安全性更高,并且可以省去每次输入密码的步骤。

配置流程

  1. 配置自己的邮箱和用户名

    git config user.name xxx
    git config user.email xxx
    
  1. 创建密钥队

    ssh-keygen -t rsa -C "邮箱"
    

    说明:命令执行完后,会在指定的保存路径下会生成2个文件,id_rsa私钥文件和id_rsa.pub公钥文件。一般是在当前登录用户路径下(C:\Users\用户名.ssh),可以使用 ls ~/.ssh来查看

  1. 配置密码

    登录对应的git,在SSH密钥处把id_rsa.pub中的文件拷贝进去即可。

git常用命令速查表

git常用命令速查.png