git bash here创建项目无法选择m_【Git】:基础的基础

eb2019962d2a8ea3ab9d28316319be69.png

目录1. 什么是 Git?2. 为什么要系统地学 Git?3. 什么是版本管理?4. 集中式?分布式?5. 安装    5.1. 安装 Git    5.2. 安装一个 Git GUI Client6. Bash 基本操作命令7. Git 配置    7.1. 查看配置    7.2. Git配置文件分类8. 设置用户名与邮箱(用户标识)    9. 创建 Git 仓库    9.1. init 新仓库    9.2. clone 现有仓库    9.2. 查看仓库状态10. 查看仓库的历史记录    10.1. 显示仓库的 commit    10.2. 简化 git log 的输出    10.3. 查看 git log 统计信息    10.4. 查看文件变更细节11. 向仓库中添加 commit    11.1. git add     11.2. git commit    11.3. git diff    11.4. .gitignore12. 标签、分支、合并    12.1. Tag    12.2. Branch    12.3. Merge    12.4. Merge Conflict13. 撤销更改    13.1. 更改最后一个 commit    13.2. 还原 commit    13.3. 重置 commit        13.3.1. 引用 commit        13.3.2. 引用 commit
1. 什么是 Git?

Git 是目前世界上被最广泛使用的现代软件版本管理系统。Git 本身亦是一个成熟并处于活跃开发状态的开源项目,它最初是由 Linux 操作系统内核的创造者 Linus Torvalds 在 2005 年创造。今天惊人数量的软件项目依赖 Git 进行版本管理,这些项目包括开源以及各种商业软件。Git 在职业软件开发者中拥有良好的声誉,Git 目前支持绝大多数的操作系统以及 IDE(Integrated Development Environments)。

2. 为什么要系统地学 Git?
  • 很好用

    • 看看 GitHub 的热度...

    • 分支开发(并行开发)能力强

    • 执行速度快

    • 更容易CI/CD

    • 断了网也能工作

    • 安全性强、恢复能力强(当然,需要深刻理解Git...)

  • 有难度

    • 怎么操作?

      • 命令行?

      • 各种GUI(GitDesktop、IDE插件...)

    • 多人协作怎么玩?

      • 有哪些协作方案?

      • 冲突怎么解决?

      • 代码怎么复读?

    • 分支怎么管理?

      • master?dev?hotfix?release?....

      • 命名规范?权限控制?

      • 合并?变基?什么鬼?

    • 操作失误怎么还原?

      • 失误提交

      • 失误合并

      • 失误变基

      • 失误重置

      • 不知道为啥...就失误了57eee35a05ee83481683ea2b79c97332.png

分享一个 Git 思维导图:

cccc8dc6c23e6a149cbab936b51fc624.png

高清版下载:https://www.processon.com/mindmap/5f6eeefde401fd64b5dc1eee

3. 什么是版本管理?

版本管理就是管理更新的历史记录。它为我们提供了一些在软件开发过程中必不可少的功能,例如一款软件添加或更改源代码的过程,回滚到特定阶段,恢复误删除的文件等。

4. 集中式?分布式?
  • SVN(Subversion)是集中式的版本管理工具。

    • 集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

c7c673c00f9a25096b161fc8e64c16e6.png

  • Git 属于分布式的版本控制系统。

    • 仓库之间完全平等,每个人机器上都是一个完整的库。

      • 注:我们通常会选择一个仓库作为 “中央仓库”。

    • 仓库之间可以通过 push 或 pull 同步。

7404a4a2698eeb7549ffbb57a96e8da6.png

5. 安装

5.1. 安装 Git

  • 下载地址:https://git-scm.com/downloads

7076ce4af995c6d4169bfea3439dd33e.png

ecccc7756f42e8c445d0ae1125bfb8c8.png

  • Git Bash:Unix与Linux风格的命令行,推荐使用。

357bb46ebd6ec3cdbf56c7de7a042140.png

  • Git GUI:Git 自带的 GUI Client,就是丑了点,功能弱了点。

3a1436cf6dbccaa8aec0e7ebe56170f0.png

5.2. 安装一个 Git GUI Client

  • 个人推荐 GitHub Desktop

    • 下载地址:https://desktop.github.com/

ca69d0c28038b95439b9e10c0b882025.png

6. Bash 基本操作命令
  • cd : 改变目录

    • cd ~:回Home

    • cd . .:回退到上一级目录

  • pwd : 显示当前所在的目录路径

  • clear 清屏

  • history 查看命令历史

  • exit 退出

7. Git 配置

7.1. 查看配置

  • 查看系统级配置

    • git config --system --list

  • 查看用户级配置

    • git config --global --list

  • 查看项目级配置

    • git config --local --list

7.2. Git配置文件分类

  • System 系统级配置(适用于系统所有用户和所有项目)

    • C:\Program Files\Git\mingw64\etc

a90641d819ee18b4d31e3d6dcc9d3b36.png

  • 用户级配置(适用于当前登录用户的配置)

    • C:\Program Files\Git\mingw64\etc

f61b6f9a82522ab5cdd2fd101de2357f.png

  • 项目级配置(适用于当前登录用户的配置)

    • 项目目录中的 .git/config

a0fdac8373320ab2c2b1fdae731bd8fa.png

8. 设置用户名与邮箱(用户标识)

当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中。

  • git config --global user.name "zhangsan"

  • git config --global user.email "zhangsan@abc.com"

9.  创建 Git 仓库

9.1. init 新仓库

  • 使用 git init 命令可以在当前目录下创建新的空仓库。

    • 运行此命令可以创建隐藏 .git 目录。此 .git 目录是仓库的核心/存储中心。它存储了所有的配置文件和目录,以及所有的 commit。

git init

42bf1f25e0be8e349db24f8956fc5d84.png

9.2. clone 现有仓库

  • git clone 命令用于创建一个与现有仓库完全相同的副本。该命令

    • 会获取现有仓库的路径

    • 默认地将创建一个与被克隆的仓库名称相同的目录

    • 可以提供第二个参数,作为该目录的名称

    • 将在现有工作目录下创建一个新的仓库

 git clone https://github.com/webj2eedev/webj2ee-git-course.git

cf934983fa8bcf418270501d572c0739.png

9.3. 查看仓库状态

  • git status 命令用于显示 Git 仓库的状态。

    • 它将告诉我们 Git 正在考虑什么,以及 Git 所看到的我们仓库的状态。是基础的基础。

git status

7bdb1c7a47e0a20e333a53f17bb8587d.png

10.  查看仓库的历史记录

10.1. 显示仓库的 commit

  • git log 命令用于显示仓库中所有 commit 的信息。

    • 默认情况下,该命令会显示仓库中每个 commit 的:

      • SHA

      • 作者

      • 日期

      • 消息

76327da4c696423f6855464138c82ef4.png

10.2. 简化 git log 的输出

git log --oneline
  • 每行显示一个 commit

  • 显示 commit 的 SHA 的前 7 个字符

  • 显示 commit 的消息

e1247eb836cbfac0081219f0576f8ace.png

334395dbed0c264890436546d3f11db2.png

10.3. 查看 git log 统计信息

git log 命令有一个选项可以用来显示 commit 中更改的文件以及添加或删除的行数。该选项为 --stat(stat 是“统计信息 statistics”的简称):

git log --stat
  • 显示被修改的文件

  • 显示添加/删除的行数

  • 显示一个摘要,其中包含修改/删除的总文件数和总行数

de8074bfe4e5b5c1020aa0af2c92f4bb.png

748d1906adebdc9f7672ebd891f55347.png

10.4. 查看文件变更细节

  • git log 命令具有一个可用来显示对文件作出实际更改的选项。

    • 该选项是 --patch,可以简写为 -p。

      • 显示被修改的文件

      • 显示添加/删除的行所在的位置

      • 显示做出的实际更改。

git log -p

a78d5b1a44c379eae936fc6d1d2fd012.png

11.  向仓库中添加 commit

11.1. git add

  • 创建一波文件

d515b1c32db5f118f1bbab4bf9310562.png

  • 检查一波 git 状态

d9e102d8d729b613432dcb31a6dd1369.png

  • 要将所有文件提交到仓库中,首先需要使用 git add 命令将这些文件从工作目录移到暂存区。

494f5f2366f28481a97a2bba226fd61f.gif

git add app.cssgit add index.htmlgit status

323f6f07ab44fc6b305598d9da1522fe.png

  • "Changes to be committed"区域显示了位于暂存区的文件!

  • "git add ." 可以一次性添加所有嵌套文件和目录

11.2. git commit

  • git commit 命令会取出暂存区的文件并保存到仓库中。

    • 可以使用 -m 选项指定 commit 信息

git commit -m "新增HTML、CSS文件"

43b73d9af6bf9f6df31a165e493e2f11.png

11.3. git diff

  • git diff 命令可以查看工作树、暂存区、最新提交之间的差别。

    • git diff:查看工作树与暂存区的差别。

    • git diff HEAD:查看工作树和最新提交的差别。

57ef71b9262276787d9f6daa555b696a.png

11.4. .gitignore

  • .gitignore 文件用来告诉 git 不应跟踪的文件。该文件应该放在 .git 目录所在的目录。

0e1f37bc014008b0bb33f465b2b84e6a.png

12. 标签、分支、合并

12.1. Tag

Git 可以给仓库历史中的某一个提交打上标签,以示重要。比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)

  • git tag 命令用来标记特定的 commit 。

    • 添加标签

      • git tag -a v1.1 -m "my version 1.1"

    • 向指定的 commit 添加标签

      • git tag -a v1.0 03e8dd7 -m "my version 1.0"

    • 删除标签

      • git tag -d v1.0

    • 显示仓库中的所有标签

      • git tag

977526a360d876956821e8dd97e872c1.png

12.2. Branch

这个视频不错哟 4e84956eb91211c728d2bb6b09f94157.png

  • git branch

    • 列出仓库中的分支

9c4397c0297eb969e61eeafe57e1af27.png

  • git branch sidebar

    • 创建一个叫做 "sidebar" 的分支

  • git checkout sidebar

    • 切换到 "sidebar" 分支

      • 从工作目录中删除 git 跟踪的所有文件和目录

      • 转到仓库,并提取分支指向的 commit 所对应的所有文件和目录

  • git branch -d sidebar

    • 删除 "sidebar" 分支

      • 无法删除当前所在的分支

      • 如果某个分支上有任何其他分支上都没有包含的 commit(也就是这个 commit 是要被删除的分支独有的),git 不会删除该分支。

  • git checkout -b footer master

    • 基于 master 分支,创建并切换到 footer 分支上

b97e09c878d56ca3300be21dda903759.png

12.3. Merge

这个视频同样不错

  • 将分支组合到一起称为合并。

    • 当你要合并分支时,务必知道当前位于哪个分支上。注意,合并分支会提交 commit。

    • 当我们合并时:

      • 我们将其他分支合并到当前(检出的)分支上。

      • 我们不是将两个分支合并到一个新的分支上。

      • 也不是将当前分支合并到其他分支上。

  • git 有两种合并:

    • 普通合并(no-fast-forward merge)

      • If we committed changes on the current branch that the branch we want to merge doesn't have, git will perform a no-fast-forward merge.

      • With a no-fast-forward merge, Git creates a new merging commit on the active branch. The commit's parent commits point to both the active branch and the branch that we want to merge!

473f7fbb366269957f539f3f7dccaa3e.gif

    • 快进合并(Fast-forward merge)

      • A fast-forward merge can happen when the current branch has no extra commits compared to the branch we’re merging. 快进合并将使当前检出的分支向前移动,直到它指向与另一个分支指向的 commit 一样为止。

d179810d8b8f29ea648cd78788b55864.gif

  • git merge 指令用来合并 git 分支,它将:

    • 查看将合并的分支

    • 查看分支的历史记录并寻找两个分支的 commit 历史记录中都有的单个 commit

    • 将单个分支上更改的代码行合并到一起

    • 提交一个 commit 来记录合并操作

git merge 

12.4. Merge Conflict

当相同的行在要合并的不同分支上做出了更改时,就会出现合并冲突。git 将在合并途中暂停,并告诉你存在冲突,以及哪些文件存在冲突。要解决文件中的冲突:

  • 找到并删掉存在合并冲突指示符的所有行

  • 决定保留哪些行

  • 保存文件

  • 暂存文件

  • 提交 commit

4599d79ff56bca3148ffd7c11381aef2.png

13af73cb8af2e771fcaec58cfe8dbb7d.png

13. 撤销更改

13.1. 更改最后一个 commit

  • git commit --amend

    • 如果你的工作目录没有内容(也就是仓库中没有任何未 commit 的更改),那么运行 git commit --amend 将使你能够重新提供 commit 消息。

    • git commit --amend 使你能够包含忘记包含的文件(或文件更改)

      • 编辑文件

      • 保存文件

      • 暂存文件

      • 运行 git commit --amend

03beadf18b4c07874da4e7b59c90df54.png

13.2. 还原 commit

当你告诉 git 还原(revert) 具体的 commit 时,git 会执行和 commit 中的更改完全相反的更改。

git revert of-commit-to-revert>

此命令:

  • 将撤消目标 commit 所做出的更改

  • 创建一个新的 commit 来记录这一更改

13.3. 重置 commit

一定要谨慎使用 git 的重置功能。这是少数几个可以从仓库中清除 commit 的命令。如果某个 commit 不再存在于仓库中,它所包含的内容也会消失。

先看个视频

13.3.1. 引用 commit

你已经知道可以使用 SHA、标签、分支和特殊的 HEAD 指针引用 commit。有时候这些并不足够,你可能需要引用相对于另一个 commit 的 commit。例如,有时候你需要告诉 git 调用当前 commit 的前一个 commit,或者是前两个 commit。我们可以使用特殊的“祖先引用”字符来告诉 git 这些相对引用。这些字符为: 

  • ^ – 表示父 commit

  • ~ – 表示第一个父 commit

我们可以通过以下方式引用之前的 commit:

  • 父 commit – 以下内容表示当前 commit 的父 commit

    • HEAD^

    • HEAD~

    • HEAD~1

  • 祖父 commit – 以下内容表示当前 commit 的祖父 commit

    • HEAD^^

    • HEAD~2

  • 曾祖父 commit – 以下内容表示当前 commit 的曾祖父 commit

    • HEAD^^^

    • HEAD~3

^ 和 ~ 的区别主要体现在通过合并而创建的 commit 中。合并 commit 具有两个父级。对于合并 commit,^ 引用用来表示第一个父 commit,而 ^2 表示第二个父 commit。第一个父 commit 是当你运行 git merge 时所处的分支,而第二个父 commit 是被合并的分支。

f62233d01d3696d2186bac758ebb68fa.png

13.3.2. git reset 命令

  • git reset 命令用来重置(清除)commit:

git reset 
  • 可以用来:

    • 将 HEAD 和当前分支指针移到目标 commit

    • 清除 commit

    • 将 commit 的更改移到暂存区

    • 取消暂存 commit 的更改

  • git reset 的选项:

    • --mixed:更改未暂存

    • --soft:更改被移到暂存区

    • --hard:更改被清除

22495d5d266316f919e42c82f454f242.png

学习资料:

https://try.github.io/

https://learngitbranching.js.org/?locale=zh_CN

https://ohshitgit.com/

https://geeeeeeeeek.github.io/git-recipes/

https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1

https://cn.udacity.com/course/version-control-with-git--ud123

https://chris.beams.io/posts/git-commit/

快捷连接:

Git 官网 

https://git-scm.com/ 

Git 下载地址: 

https://git-scm.com/downloads 

Git GUI Clients 下载地址: 

https://git-scm.com/downloads/guis

GitHub Desktop:

https://desktop.github.com/

9ba687d4e5fd888e9271d2e332f8b7ae.png


9f278e9f453894ab092fa5ae6a668829.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值