git 使用
Git是什么
git 是最先进的分布式版本控制系统
版本库
又名仓库,你可以简单的理解为一个目录, 这个目录里所有的文件都被 git
给管理起来,每个文件的删除,修改, git
都能跟踪,并且在任何时候都能还原。
常用命令
初始化一个仓库
git init
把文件放进仓库里,只需要两步
git add reade.txt # 添加文件
git commit -m "add one file" # 提交文件
查看现在的状态
git status # 现在仓库处于什么状态
git diff # 改动和之前的区别
git log # 显示所有的提交记录
显示版本信息
git log --pretty=oneline #显示提交记录
git reset --hard #查看当前的版本信息
分支管理
git branch # 所有的分支
git branch -r # 所有的远端分支
git checkout -b debug_z # 从当前分支的基础上,创建新的分支,并切换到新分支上
分支的合并
git merge debug_z # 将 debug_z 分支合并到当前分支
git merge --abort #取消合并 # 取消合并
git restore * # 撤销提交
git reset --hard HEAD^ #撤销上一次提交
- reset: 是使用移动头指针的方式,来回退到历史版本
- revert: 是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容
- restore: 使得在工作空间但是不在暂存区的文件撤销更改(内容恢复到没修改之前的状态)
- git restore --staged: 是将暂存区的文件从暂存区撤出,但不会更改文件的内容
tag
git tag # 参看所有的 tag
git tag | grep dev # 查看所有分支中,dev 开头的
git tag dev-admin-0.01 # 打 tag
git push --tags # 把 tag 推送推送到远端
git 相关的自定义命令
由于 git
命令使用非常频繁,所以在日常使用中,设置alias
会使方便操作
alias gst='git status'
alias gad='git add .'
alias gcm='git commit -m'
alias gsw='git switch'
alias gp='git pull&&git push'
alias gck='git checkout'
alias gpt='git push --tag'
alias gbr='git branch'
git配置
配置路径 ~/.gitconfig
[init]
defaultBranch = master
[user]
name = zzz
email = zzz.@mail.com
[core]
editor = vim
autocrlf = false
excludesfile = ~/.config/gitignore_global.txt
[pager]
branch = fasle
linux 下避免每次都输入用户名密码
1.常规方法
前提: 此方法只适合于使用 码云
的用户,github
的用户,或有略微的不同
1.先创建一个文件,文件名如下:
touch .git-credentials
2.使用 vim 打开后,记录如下命令,并保存
https://username:password@github.com # github的用法
https://username:password@gitee.com # 码云的用法
username:password 分别为你个人的用户名和密码,非固定字段;
3.将该文件永久保存
git config --global credential.helper store # store为永久存储
建议方法
直接使用 key
验证的方式。使用私钥登录的方式,无需再输入用户名和密码。
git 合并提交
pick d42672c 添加了一行a
s ac45165 添加了一行b
s f61173f 添加了一行c
git merge 和 git rebase 两者的区别
区别和应用场景
git rebase
和 git merge
的最大区别,那就是: 两种合并所产生的log不一样
- 融合个人代码到公共分支的时候用
git merge
(自己的代码,调试完了,合到 master的时候) - 融合公共代码到个人分支的时候用
git rebase
(开发过程中,master 在不断变化,需要经常把 master 合进来)
参考文献
https://dingjingmaster.github.io/2022/05/0002-rebase与merge的区别/