Git 基本使用

目录

[Git 安装与设置](#Git 安装与设置)

[在 Windows上安装 Git](#在 Windows上安装 Git)

[git 的配置](#git 的配置)

[Git 原理](#Git 原理)

[git 的四个区域](#git 的四个区域)

[git 工作流程](#git 工作流程)

[git 文件的状态](#git 文件的状态)

[Git 操作](#Git 操作)

创建仓库

免密登录

基本操作

版本回退

本地仓库整理

分支命令

合并分支

解决冲突


Git 安装与设置

在 Windows上安装 Git

在 Windows上使用 Git,可以从 Git 官网直接下载安装程序,然后按默认选项安装即可。

安装完成后,在开始菜单里找到"Git"->"Git Bash",蹦出一个类似命令行窗口的东西,就说明Git安装成功!

git 的配置
bash 复制代码
# 设置当前目录下的用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

# 查看配置列表
git config -l

Git 原理

git 的四个区域

本地 3 个区域 + 远程 git 仓库

  • Workspace:工作区,即当前工作目录,存放代码的位置。
  • Stage/Index:暂存区,临时存放改动,事实上是一个文件,保存即将提交的文件列表信息
  • Repository:仓库区(版本库),存放提交的所有版本的数据, HEAD 指向最新的版本。
  • Remote Directory:远程仓库,托管代码的服务器
git 工作流程
  1. 在工作目录中添加、修改文件
  2. 将需要进行版本管理的文件放入暂存区 git add 文件名
  3. 将暂存区域的文件提交到仓库 git commit -m "提交信息"
  4. 本地仓库的修改 push 到远程仓库 git push origin master,如果失败则执行第5步
  5. 将远程仓库的修改拉取到本地 git pull origin master,修改冲突,回到第3步
git 文件的状态

文件的各状态转化如图所示:

  • Untracked:未跟踪。文件未入仓库,不参与版本控制。
  • Unmodify:文件已入仓库但未修改,即工作区与仓库中的文件一致。
  • Modified:文件已被修改,即工作区与仓库中的文件不一致。
  • Staged:暂存状态

Git 操作

创建仓库
  • git init:将当前文件夹作为 Git 仓库,并在该文件夹中生成一个 .git目录,该目录包含了资源的所有元数据,不可修改里面的内容。
  • git init --bare:在当前目录生成不带 .git 的项目文件,即把 .git 文件夹的内容直接生成到当前目录
  • git init myProject:新建一个 myProject 文件夹作为 Git 仓库,并在 myProject 文件中新建一个 .git目录
  • git init --bare myProject:新建一个 myProject 文件夹作为 Git 仓库,并把 .git 文件夹的内容直接生成到 myProject 文件中
  • git clone <repo> <directory>:克隆一个仓库到指定目录

git init --bare 创建时不带 .git 文件夹,事实上它不带工作目录,而是作为服务器仓库供各开发者push、pull 数据,实现数据共享和同步,不保存文件,只保存历史提交的版本信息。

免密登录

使用协议 (http, ssh, git等) 来实现远端仓库和本地仓库的交互。

使用 ssh 公钥免密登录 git 服务器

bash 复制代码
 # 1、本地生成公钥和私钥 
 ssh-keygen -t rsa
 ​
 # 2、复制公钥内容到远端 git 服务器
 # 本地:拷贝本地公钥 id_rsa.pub
 cat ~/.ssh/id_rsa.pub
 # 远端:复制到 git 服务器的 authorized_keys
 vim .ssh/authorized_keys
 ​
 # 3、远端仓库克隆到本地
 git clone  <git仓库路径>
基本操作
bash 复制代码
# 1、暂存,工作区 -> 暂存区
git add <文件名>
 ​
# 2、提交,暂存区 -> 本地仓库,提交到仓库的文件才真正被 git 追踪记录
git commit -m "提交信息"
-a 把当前暂存区里所有的修改(包括删除操作)都提交,未添加到暂存区的内容是不提交
 ​
# 3、推送,本地仓库 -> 远端仓库
git push origin master
 ​
# 拉取合并
git pull origin master
# 查看状态
git status

# 对比文件差异
git diff <commitID>
 ​
# 查看日志,显示每次提交的相关信息,包括 commitID、提交作者、提交日期、备注信息
git log [option]
git log --all 显示所有分支
git log --pretty=oneline 将提交信息显示为一行
git log --abbrev-commit 使得输出的commitId更简短
git log --graph 以图的形式显示
     
# 忽略文件
# 目录下创建.gitignore文件,添加文件至忽略列表
版本回退
  • 从工作区回退,工作区 -> null,清空工作区的的修改

    bash 复制代码
    # 从本地仓库或暂存区中检出文件,并且覆盖工作目录的内容
    # 也就是说放弃本地的所有修改,但是工作区新创建的文件不会被删除
    git checkout
  • 从暂存区回退,暂存区 -> 工作区

    bash 复制代码
    git resore -S
  • 从本地仓库回退

    bash 复制代码
    # 使用该 commit 做回滚操作
    git reset commitId / HEAD^
    ​
    # 1、本地仓库 -> 暂存区,暂存区和工作区都不会被改变
    git reset --soft commitId / HEAD^
     ​
    # 2、本地仓库 -> 工作区,暂存区同步到指定的commit,工作区不改变
    git reset --mixed commitId / HEAD^
     ​
    # 3、本地仓库 -> null,修改的内容被清除,暂存区和工作区都同步到指定的提交
    git reset --hard  commitId / HEAD^
  • 从远端仓库回退

     git revert commitId
     fix conflict
     git commit
     git push 
    
本地仓库整理

注意:修改某个结点导致从该结点往后的所有结点的 commitId 发生变化,会引起其他人冲突,要确保没有人基于你的分支开发。

  • 整理上一次的提交

    bash 复制代码
    git commit -amend
  • 整理多次提交:本地 commit 直接使用 git rebase -i 。 push 到远端的 commit 需要使用 git log 查看 commit id,来确定要修改的区间范围。

    bash 复制代码
     git rebase -i <commitId>

当你执行 `git rebase -i <commit>` 命令时,Git 会打开一个文本编辑器,列出从 `<commit>` 到当前 HEAD 的所有 commit。每个 commit 的前面都有一个命令,用于告诉 Git 对这个 commit 进行什么操作。你可以修改这个命令来改变 Git 对这个 commit 的操作。

可用的命令包括:

    • `p` 或 `pick`:使用这个 commit
    • `r` 或 `reword`:使用这个 commit,但需要修改 commit 信息
    • `e` 或 `edit`:使用这个 commit,但会停下来让你修改这个 commit(你可以修改文件内容,添加或删除文件,等等)
    • `s` 或 `squash`:使用这个 commit,但会将这个 commit 和前一个 commit 合并在一起
    • `f` 或 `fixup`:和 `squash` 类似,但会丢弃这个 commit 的 commit 信息
    • `d` 或 `drop`:不使用这个 commit

在编辑器中修改命令后保存并关闭编辑器,Git 就会开始执行 rebase,按照你指定的命令对 commit 进行操作。在 rebase 过程中,Git 可能会停下来让你解决合并冲突,或者让你修改 commit。你可以按照 Git 的提示进行操作,然后继续 rebase。

分支命令
bash 复制代码
# 查看分支
git branch
# 创建分支
git branch 分支名
# 创建并切换分支
git checkout -b 分支名 
# 切换分支
git checkout 分支名
git switch 分支名
# 删除分支,不能删除当前分支,只能删除其他分支
git branch -d b1
# 合并分支
git merge
git rebase
合并分支

参考:++图解 Git 基本命令 merge 和 rebase++

HEAD 指向当前所在的分支,当分支切换时,HEAD 会跟着切换到对应分支。

解决冲突

冲突的产生原因:不同分支修改了同一文件的同一行或者相邻行。

解决:

  1. 合并分支: git merge / git rebase,合并前先 git pull 更新代码
  2. git add
  3. git commit
  4. git push
相关推荐
云端奇趣1 小时前
探索 3 个有趣的 GitHub 学习资源库
经验分享·git·学习·github
F_D_Z5 小时前
【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:
网络·git·网络协议·ssl
等风来不如迎风去10 小时前
【git】main|REBASE 2/6
git
艾伦~耶格尔10 小时前
IDEA 配置 Git 详解
java·ide·git·后端·intellij-idea
云兮杜康10 小时前
IDEA中用过git之后文件名颜色全变红
java·git·intellij-idea
睡不醒的小泽10 小时前
git merge 和 git rebase
git
艾伦~耶格尔10 小时前
Git 下载及安装超详教程(2024)
git·gitee·码仓
weixin_4381973811 小时前
linux部署redis,整合ansible和redis
linux·redis·git
安全在心中12 小时前
gitee公钥设置、创建库及使用
git·gitee
无条件做异梦20 小时前
git维护【.gitignore文件】
git