Git 基本使用

Git 安装

官网:Git (git-scm.com) image.png

具体版本根据自己计算机 32 或者 64 位为准 image.png


Git 常用命令

常用 GIt 命令

命令作用示例
git config --global user.name "用户名"设置全局的用户名,用于标识你在 Git 中的身份git config --global user.name "张三"
git config --global user.email "邮箱"设置全局的电子邮件地址,用于标识你的身份。git config --global user.email "zhangsan@example.com"
git init初始化一个新的 Git 仓库。在一个新文件夹中运行 git init 来创建一个本地仓库。
git status显示工作目录的状态,包括哪些文件被修改但尚未提交。在仓库中运行 git status 查看有哪些文件需要提交。
git add 文件名将文件添加到暂存区,准备提交git add README.md 把 README.md 文件添加到暂存区。
git commit -m "日志信息" 文件名将暂存区的更改提交到仓库,并附带一条提交消息。git commit -m "添加了 README 文件" 提交暂存区的更改,并加上说明。
git reflog显示历史记录,包括每一个提交的哈希值和操作。运行 git reflog 查看所有的历史操作。
git reset --hard 版本号将仓库重置到指定的版本。git reset --hard 98c7f4e 将仓库重置到哈希值为 98c7f4e 的提交。

设置用户签名

text
复制代码
git config --global user.name 用户名 git config --global user.email 邮箱

注意点: **签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看 到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。 **

如何查看自己签名是否设置成功? 打开 git Bash,查看当前用户——我这里是 ASUS image.png

在计算机 C 盘找到这个位置 image.png image.png

image.png

我刚刚设置的就有了 image.png


初始化本地库

text
复制代码
git init

创建一个空的文件夹 image.png

右键打开 Git,输入指令 image.png

没看见可能是隐藏了 image.png


查看本地库状态

text
复制代码
git status

默认分支系统自动会设置为 master image.pngimage.png

随便新建个文件,并随便添加写东西,模拟写好的代码 image.png image.png image.png image.png image.png image.png

这里显示了有未追踪的文件,需要 git add 把它从工作区添加至暂存区


添加至暂存区

image.png

text
复制代码
git add 文件名

LF 转换成 CRLF 是安装 Git 时默认的,这里知道即可 image.png image.png

继续查看本地库状态,文件现在放在了在暂存中的文件 提示的 git rm --cache + 文件 可以删掉在暂存区的文件 但文件始终都在工作区保存着的,只是删掉了暂存区里的文件而已 image.png image.png


提交本地库

image.png 文件添加到暂存区,那么下一步就可以提交到本地库了,从而做到版本控制

text
复制代码
git commit -m "日志信息" 文件名

image.png image.png

再次查看本地库,会发现 no commit yet 没有了,因为刚才已经 commit 提交一次了 image.png image.png

这是可以查看版本信息 git log: 用于查看仓库的历史提交记录。 git reflog: 用于查看引用(如分支、标签和 HEAD)的变动历史,常用于恢复丢失的提交。 image.png


修改命令

情景模拟,如果此时对 helloworld.txt 文件内容进行修改,再进行查询本地库状态 这是因为修改过代码但是又没有 add 添加导致的 image.png image.pngimage.png

此时再次执行 add 命令即可 image.png

再次版本提交 commit 提交至本地库,就有了第二个版本 image.png image.png

当前“指针”也是指向第二个版本 image.png


历史版本切换

text
复制代码
git reset --hard 版本号

git log: 用于查看仓库的历史提交记录。 git reflog: 用于查看引用(如分支、标签和 HEAD)的变动历史,常用于恢复丢失的提交。 可以理解成 log 为详细版,reflog 为精简版 image.png

这里的版本号就是 git log 和 git reflog 是生成的一长串字符 只是说,reflog 只显示前 7 位,log 显示的是全部 image.png

情景模拟,下面这是第二个版本的,我要切换成第一个版本回去看看 执行 reset 命令,reflog 查询的“指针”就会移动到原先的第一个 image.pngimage.png

查看文件,已经回到了最开始写的样子(没有了第二次添加的 Java 字样) image.png


Git 分支操作

公司里服务器运行模式 image.png

分支概述

举个例子: 想象你正在写一本书,这本书有一个主稿本(这相当于你的主分支,通常叫做 mainmaster)。每次你想添加新章节或修改现有内容时,你可以直接在主稿本上做这些更改。但是,如果直接在主稿本上修改,一旦出现错误或者需要撤销某些更改,可能会非常麻烦。 为了避免这种情况,在版本控制系统中,当你要开始一个新的功能或修复一个 bug 时,你可以从主分支创建一个“副本”,这个副本就称为“分支”。 在这个副本上,你可以自由地进行更改而不会影响到主分支上的代码。

一个简单的步骤说明: image.png

  1. 从主分支创建分支
    • 假设主分支是 main,你可以创建一个名为 feature-1 的分支来开发新功能。
    • 这个 feature-1 分支就像是 main 分支的一个快照,你在 feature-1 上所做的任何更改都不会立即影响到 main 分支。
  2. 在分支上工作
    • feature-1 分支上编写代码、测试并调试,直到新功能完成且稳定。
  3. 合并分支到主分支
    • 当你对 feature-1 分支满意后,你可以将其合并回 main 分支。这意味着将 feature-1 分支中的所有更改应用到 main 分支上。
  4. 删除分支(可选)
    • 如果不再需要 feature-1 分支,你可以将其删除以保持仓库的整洁。

常用分支命令

命令作用示例说明
git branch 分支名创建一个新的分支。如果你想创建一个名为 feature-login 的新分支,你可以输入 git branch feature-login这个命令会创建一个新分支,但它不会自动切换到这个新分支。你需要使用 git checkout 命令来切换到新创建的分支。
#### git branch -v
列出所有本地分支及其最近的一次提交的信息。输入 git branch -v 将列出所有分支及每个分支的最新提交。当前所在的分支会被标记出来,通常会用星号 (*) 或者颜色突出显示。
#### git checkout 分支名
切换到指定的分支。如果你想切换到 feature-login 分支,你可以输入 git checkout feature-login这个命令会将你的工作目录切换到指定的分支,并更新文件到该分支的最新状态。
#### git merge 分支名
把指定的分支合并到当前分支。如果你想将 feature-login 分支合并到当前分支 main,你应该先确保你已经切换到了 main 分支,然后输入 git merge feature-login这个命令会尝试将 feature-login 分支的所有更改合并到当前分支。如果在这个过程中有任何冲突,Git 会提示你解决这些冲突。

查看创建切换分支

列出所有本地分支及其最近的一次提交的信息。

text
复制代码
git branch -v

image.png

假设你想要添加一个新功能,并将其合并到主分支中 创建并切换到新分支:

text
复制代码
git checkout -b feature-login
  • **git checkout**: 这个命令通常用于切换分支。
  • **-b**: 这是一个选项,告诉 Git 在切换分支之前先创建一个新的分支。
  • **feature-login**: 这是你想要创建的新分支的名字。

这条命令结合了 git branchgit checkout,创建并立即切换到新分支。 当然也可以分步骤来

text
复制代码
git branch feature-login
text
复制代码
git checkout feature-login

现在就选择到了新创建的 feature-login 分支中,并对该分支的文件进行操作 image.png

开始在新分支上工作: 编辑文件,添加新功能(假设)。 image.png

使用 git add . 添加文件到暂存区。 使用 git commit -m "Add login feature" 提交更改。 这样就完成了查看、创建、切换分支操作 image.png image.png


合并分支(正常合并)

text
复制代码
git merge 分支名

如果你想将 feature-login 分支合并到当前分支 main,你应该先确保你已经切换到了 main 分支,然后输入 git merge feature-loginimage.png image.pngimage.png

text
复制代码
cat 文件名

查看当前文件内容,和之前副分支(feature-login)上的对比 image.png image.png

这就是一个正常的合并,并没有产生代码的冲突 因为这是 master 分支没有任何修改,只是在 feature-login 分支上修改并合并的 不会产生冲突合并


合并分支(冲突合并)

产生冲突的原因

  1. 两个分支上的不同修改
    • 假设你有两个分支:mainfeature-login
    • main 分支上,你可能修改了一个文件中的某一行。
    • feature-login 分支上,你可能也修改了同一个文件中的同一行,但修改的内容不同。
  2. Git 无法自动合并
    • 当你尝试将 feature-login 分支合并到 main 分支时,Git 发现两个分支对同一个文件的同一行有不同的修改
    • Git 无法自动确定应该保留哪个版本的修改,因为这两种修改可能是互斥的。
    • 因此,Git 会停止合并过程,并标记出冲突的地方。

如何解决冲突

  1. 识别冲突
    • Git 会在命令行中告诉你哪些文件发生了冲突,并且在这些文件中插入特殊的冲突标记。
    • 冲突标记通常包括三个部分:<<<<<<< HEAD=======>>>>>>> other-branch-name
    • <<<<<<< HEAD 标记冲突开始,表示当前分支(通常是你要合并到的目标分支)的版本。
    • ======= 标记冲突中间,用于分隔两个版本。
    • >>>>>>> other-branch-name 标记冲突结束,表示另一个分支的版本。
  2. 手动编辑文件
    • 打开发生冲突的文件,找到冲突标记。
    • 检查 HEAD 版本和另一个分支的版本,决定保留哪一部分或如何合并这两部分。
    • 删除冲突标记,并保存文件。
  3. 标记冲突解决
    • 使用 git add <file> 命令标记你已经解决了冲突。
    • 对于每个解决冲突的文件,都需要执行这个命令。
  4. 完成合并
    • 一旦所有冲突都被解决并标记,你可以继续完成合并过程。
    • 使用 git commit 命令创建一个新的提交,这个提交包含了合并的结果。

示例演示

假设你有两个分支:mainfeature-login。在 feature-login 分支上,你修改了第一行文件中内容,而在 main 分支上,你也修改了相同的位置,但内容不同。

在 master 分支倒数第二行添加内容,同时添加暂存区,并提交到本地库 image.pngimage.png

切换到 feature-login 分支,也进行修改,最后一行添加 feature-login test 同时添加暂存区,并提交到本地库 image.png image.png image.png

回到 master 分支,尝试合并,产生冲突合并 image.png image.png

同时分支状态也发生变化,git status 获取状态,手动合并代码 image.png image.png

打开文件会发现 Git 已经标注好冲突的位置,产生合并冲突,Git 不知道要合并哪个分支的版本 需要自己手动解决 image.png image.png

因为是两个分支版本的最后两行出问题的 如果我 master test 和 feature-login test 都想要的话,直接进行修改即可 像下面这样子直接修改 image.png 意思是说我合并后的最后两行想要合并成这样子,Git 给出冲突标注也要删除 记住,这里也要添加到暂存区,但 commit 提交的时候就不用带文件名了,不然 Git 就会报错

修改后也是要添加并提交的 image.png

进行添加带文件名没有什么问题 image.png

但是在 commit 提交带文件名就会报错 image.png image.png

不带文件名 commit 提交即可,右边括号也不显示 merging 合并中了 image.png

查看文件,合并分支成功,手动解决冲突合并 image.png

注意,此时切换到 feature-login 分支,文件还是只有一行的状态 毕竟是把 feature-login 的分支合并到 master 分支去的,那 feature-login 分支也就没必要也一起合并 image.png

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP