git | 常用配置与指令

简要介绍

  • Git 是一个分布式版本控制系统,用于跟踪代码、文档或项目的历史变化,尤其在软件开发中广泛应用。
  • 它允许多个开发者在本地和远程仓库上协作,同时保持项目的完整历史和变更记录。
  • Git 最初是由 Linux 开发者 Linus 用了仅仅两周时间纯C语言编写而成。
  • Git 是是目前为止最好用的分布式版本控制系统。
  • github 用的就是 git 系统来管理它们的网站。注意,比如说GitHub、Gitee等,它们和 git 是两个不同的概念,前者是一个社区,后者是一个服务系统,GitHub 和 Gitee 支持 git 分布式系统。
  • 下面是git的流程图
    ![[博客/常用工具/Pasted image 20240905234735.png]]

开始使用

一、配置姓名和邮箱

git config --global user.name "head"
git config --global user.email "iamhead@163"

二、配置常用长指令使用别名

  1. 在用户目录中创建 .bashrc 文件,也可以在 gitbash 中执行 touch ~/.bashrc
  2. 在 .bashrc 中进行配置,参考如下
# 用于输出 git 提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'

# 用于输出当前目录所有文件及基本信息
alias ll='ls -al'
  1. 打开 GitBash,执行 ~/.bashrc

三、解决GitBash乱码问题

  1. 打开 GitBash 执行下面命令
git config --global core.quotepath false
  1. ${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
    注:
  1. git checkout 和 git switch 都是 Git 中用于切换分支或恢复文件的命令,但 switch 是 Git 从2.23版本以后引入的,checkout 是 Git 早期的命令。
  2. switch 命令只用于分支操作,而 checkout 命令除了可以切换分支外,还可以用于恢复文件。
  3. 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],则强制删除,不做检查

合并冲突

  • 当两个分支上对文件的修改可能会存在冲突,如同时修改了同一个文件的同一行,这时需要手动解决冲突,解决方案如下
  1. 处理文件冲突的地方
  2. 将解决完冲突的文件加入暂存区(git add)
  3. 提交到仓库(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]]
git config --global http.proxy http://127.0.0.1:xxxx
xxxx为系统代理端口号,如图则为3372
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值