前言
Git是流行的分布式版本控制系统
官网:https://git-scm.com/downloads
Git的四个工作区域
Git本地有四个工作区域:Working Directory、Stage/Index、Repository或Git Directory、Remote Directory。文件在这四个区域之间的转换关系如下:
Workspace: 工作区
Index / Stage: 暂存区
Repository: 仓库区(或版本库),其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器
基础配置
# 设置用户签名
> git config --global user.name 用户名
> git config --global user.email 邮箱
# 查看当前设置的签名
> cat ~/.gitconfig
关于用户签名的作用:
在Git中,用户签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。
git config --global user.name 设置的用户名与GitHub用户名没有任何关系。
当执行 git push 时,你实际上是将本地的提交发送到远程仓库(如 GitLab)。这些提交包含了提交者的身份信息(本地git config --global user.name所设置的用户)。
但是git config --global user.email所设置的邮箱与远程仓库用户的邮箱一致,部分远程仓库可以实现自动关联本地用户和远程仓库用户。
存在多个不同地址的远程仓库时,需要配置多份ssh秘钥,详见:https://blog.csdn.net/xys206006/article/details/129318366
仓库基础操作
#初始化本地仓库
> git init
#查看本地仓库状态
> git status
#添加工作区的文件到暂存区
#添加单个文件
> git add test.txt
#添加所有文件
> git add --all
#删除暂存区的内容
> git rm -cached test.txt
#提交仓库
#提交单个文件
> git commit -m "日志信息" test.txt
#提交所有文件
> git commit -m "日志信息"
#查看版本信息
> git reflog
#查看版本详细信息
> git log
#切换版本
> git reset --hard 版本号
仓库分支操作
#查看分支
> git branch -v
#创建分支
> git branch 分支名
#切换分支
> git checkout 分支名
#创建并切换分支
> git checkout -b 分支名
#合并分支
#将分支内容合并到当前分支
> git merge 分支名
合并分支时,存在冲突解决的问题
编辑存在冲突的文件,删除特殊符号,决定要使用的内容。
特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> 分支名
远程仓库操作
常用远程仓库
- github
- gitee
- gitlab
常用命令:
#查看当前远程仓库的地址和别名
> git remote -v
#远程仓库的默认别名是origin,需要换别名
> git remote add 别名 远程地址
#远程仓库的url变了,需要更新别名的url配置
> git remote set-url 别名 新的仓库url
#将本地当前分支的内容推送到远程仓库
#第一次推送,需要设置本地分支与远程分支的关联
#-u 或 --set-upstream 选项用于设置本地分支与远程分支的关联
> git push -u 别名 推送的远程仓库分支
#例:将本地当前分支的内容 推送到别名为origin的远程仓库的dev分支
> git push -u origin dev
#非第一次推送,不用设置-u选项
> git push 别名 推送的远程仓库分支
#推送代码时 --force 或 --force-with-lease选项会强制覆盖远程分支的内容
#--force强制推送,可能会导致远程分支上的更改丢失
#--force-with-lease更安全的方式,只有在本地分支包含远程分支的末端时才允许强制推送
> git push origin master --force
#克隆远程仓库到本地
> git clone 远程地址
#拉取远程仓库对应分支的最新内容 并与本地分支合并
> git pull 别名 远程仓库分支名
远程仓库别名的作用:
- 通过给远程仓库设置一个别名,可以更容易地识别和操作该远程仓库。
- 简化操作命令。
- 如果远程仓库的 URL 发生变化,只需要更新对应的别名配置,而不需要修改所有使用该远程仓库的命令。