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
相关推荐
摇滚侠5 小时前
VScode 提交代码 Git
git
YuforiaCode7 小时前
移除原有 Git 仓库关联,在IDEA中重新初始化 Git 并推送到新仓库(详细图解、包含相关问题的解决办法)
git
UIUV7 小时前
Git程序员入门笔记:从零开始掌握分布式版本控制
git
星光不问赶路人7 小时前
彻底清理 Git 分支:从查看到批量删除无效分支的全流程指南
git·github
如果是君12 小时前
【git使用】ubuntu下利用git工具提交一个工程
linux·git·ubuntu
吃鱼吃鱼吃不动了13 小时前
常用的 git 命令
git
迷路爸爸18014 小时前
Git Commit Message 规范:写出清晰、可维护的提交记录
git·python
前端赵哈哈14 小时前
Git 本地仓库操作指南:将未提交文件复刻至新分支(无需关联远端)
前端·git·github
神秘的猪头14 小时前
git应用初体验
git
麻辣璐璐1 天前
【新手小白版】Gerrit使用教程
git·gerrit·新手