文章目录
简要介绍
- Git 是一个分布式版本控制系统,用于跟踪代码、文档或项目的历史变化,尤其在软件开发中广泛应用。
- 它允许多个开发者在本地和远程仓库上协作,同时保持项目的完整历史和变更记录。
- Git 最初是由 Linux 开发者 Linus 用了仅仅两周时间纯C语言编写而成。
- Git 是是目前为止最好用的分布式版本控制系统。
- github 用的就是 git 系统来管理它们的网站。注意,比如说GitHub、Gitee等,它们和 git 是两个不同的概念,前者是一个社区,后者是一个服务系统,GitHub 和 Gitee 支持 git 分布式系统。
- 下面是git的流程图![![[博客/常用工具/Pasted image 20240905234735.png]]](https://i-blog.csdnimg.cn/direct/83d13c01f0fb439c8ba13c2bafdf7fb4.png)
开始使用
一、配置姓名和邮箱
git config --global user.name "head"
git config --global user.email "iamhead@163"
二、配置常用长指令使用别名
- 在用户目录中创建 .bashrc 文件,也可以在 gitbash 中执行 touch ~/.bashrc
- 在 .bashrc 中进行配置,参考如下
# 用于输出 git 提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
# 用于输出当前目录所有文件及基本信息
alias ll='ls -al'
- 打开 GitBash,执行 ~/.bashrc
三、解决GitBash乱码问题
- 打开 GitBash 执行下面命令
git config --global core.quotepath false
- ${git_home}/etc/bash.bashrc 文件最后加入两行
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
四、基础操作指令
- 修改已有文件和新创建一个文件,会让代码进入工作区
- 新创建的文件属于未跟踪(untracked),修改已有的文件属于(unstaged)
- 将工作区的代码提交到暂存区:git add
- 将所有代码提交到暂存区:git add .- 暂存区是提交到仓库之前的缓存区
- 将暂存区的代码提交到仓库:git commit- 每一次 commit,就是一次提交记录
- 将暂存区的代码在有提交信息的情况下提交到仓库 - 添加信息:git commit -m ‘this is commit’
- 查看当前仓库的修改状态:git status
- 版本回退:git reset
- 回退到指定版本:git reset -hard [commitID]- 其中 commitID 为要回退的版本ID- ID 使用 git log 或者 git-log 查看- 其中 git-log 为自定义的指令
- 查看已删除的提交记录:git reflog
五、分支与合并
- 有多个分支之后,我们在工作区只能对一个分支进行修改
分支使用原则
- master:生产分支,线上分支
- develop:开发分支,从 master 创建的分支
- feature:分支,从 develop 创建的分支
- hotfix:分支,从 master 创建的分支,一般用于修复 bug
git branch
- 查看分支
git branch dev
- 新建一个叫“dev”的分支
git checkout dev / git switch dev
- 切换分支
- 创建并切换分支:git checkout -b BranchName / git switch -c BranchName 注:
- git checkout 和 git switch 都是 Git 中用于切换分支或恢复文件的命令,但 switch 是 Git 从2.23版本以后引入的,checkout 是 Git 早期的命令。
- switch 命令只用于分支操作,而 checkout 命令除了可以切换分支外,还可以用于恢复文件。
- switch 命令在切换分支时更加安全。它会检查当前分支是否被修改并拒绝切换,以避免潜在的代码丢失。而 checkout 命令则没有这种检查机制,所以在切换分支时需要特别小心,以免不小心覆盖了未提交的更改。
git merge
- 合并分支
- 合并流程(重点):以将 dev 合并到 master 为例 - 切换到 master 分支 - git checkout master / git switch master- (从远程仓库)更新 master 分支 - git pull origin master- 合并 develop 分支到 master - git merge develop- 解决冲突 - 解决完冲突后:- git add <文件名>- git commit -m ‘解决xxx冲突’- 推送合并后的 master 到远程仓库 - git push origin master- 删除 develop 分支(可选) - git branch -d develop
- 合并后的继续开发: - 切换到 develop - git checkout develop / git switch develop- 将 master 上的代码合并到 develop - git merge master- 解决可能的冲突后,继续开发
git branch [-d]/[-D] BranchName
- 删除分支
- 不能删除当前分支,只能删除其他分支
- 如果为 [-d],则删除时需要做各种检查
- 如果为 [-D],则强制删除,不做检查
合并冲突
- 当两个分支上对文件的修改可能会存在冲突,如同时修改了同一个文件的同一行,这时需要手动解决冲突,解决方案如下
- 处理文件冲突的地方
- 将解决完冲突的文件加入暂存区(git add)
- 提交到仓库(git commit)
六、远程仓库
配置SSH公钥
- 生成SSH公钥 - ssh-keygen -t rsa- 一路回车(选择默认情况)
- 获取密钥 - cat ~/.ssh/id_rsa.pub
- 在GitHub/Gitee的SHH密钥中进行配置
- 验证是否设置成功 - ssh -T git@github.com / ssh -T git@gitee.com
- 设置成功后,可不用账号密码clone和push代码
- 注意克隆时要用 ssh 的 url,而非 https!
配置远程仓库
- (在要配置的仓库目录下)git remote add origin [仓库的SSH地址]
- origin 为远端仓库的名字,命名随意
- 查看远程仓库 - git remote
- 推送到远程仓库: - 将本地的main分支推送到名为origin的仓库的master分支- 如果加上 -f,则为强制覆盖- –set-upstream:推送到远端的同时并且建立起和远端分支的关联关系- git push [-f] [–set-upstream] origin main:master
克隆
- 克隆代码到本地路径 - git clone <(远程)仓库路径> [本地存放路径]- 克隆(对于一个项目)基本只用一次,之后都是抓取和拉取来更新代码
抓取和拉取
- 抓取 - git fetch [远程仓库名字] [(要抓取的)远程分支]- 抓取指令仅仅将远程仓库里的修改抓取到本地,不会进行合并- 如果不指定远程仓库名字和远程分支名,则默认抓取所有分支
- 拉取 - git pull [远程仓库名字] [(要抓取的)远程分支]- 拉取指令将远程仓库的修改拉取到本地,并进行合并,等于 fetch + merge- 如果不指定远程仓库名字和远程分支名,则默认抓取所有并更新当前分支
GitHub常见问题
push代码失败
- 取消git的代理
git config --global --unset http.proxy
git config --global --unset https.proxy
- 如果还不行,先去设置中查看系统代理的端口号
- 参考如下
- ![![[博客/常用工具/photo1.png]]](https://i-blog.csdnimg.cn/direct/279f009868db46458efabe12fad60b40.png)
git config --global http.proxy http://127.0.0.1:xxxx
xxxx为系统代理端口号,如图则为3372
本文转载自: https://blog.csdn.net/2401_82882583/article/details/141947499
版权归原作者 饼卷馒头 所有, 如有侵权,请联系我们删除。
版权归原作者 饼卷馒头 所有, 如有侵权,请联系我们删除。