Git 指令篇
Git 指令
本篇文章将会从创建仓库
、基本操作
、分支管理
、查看提交历史
这几方面来对一些通用指令进行说明,其中基本操作
部分最为重要,因为它包括的指令是我们在平常开发的流程中执行最频繁的
创建仓库
创建git 仓库
有两种方法:
- 将本地的项目初始化为
git 仓库
克隆
远程的仓库到本地
git init
该命令是用来初始化本地项目为一个Git 仓库
的,Git
的很多命令都需要在Git
的仓库中运行,所以git init
是使用Git
的第一个命令
git init
在执行完成此命令后,Git 仓库
会生成一个.git 目录
,该目录包含了资源的所有元数据
。此时,该目录下的所有文件都会被视为未跟踪的文件(Untracked Files)
注意: git init 命令只能用于初始化一个新的 Git 代码库
git clone
该命令用来从现有的远程 Git 仓库
中拷贝项目到本地。Git
会将远程代码库
中的所有文件和版本历史复制到本地,并创建一个与远程代码库
相同的本地代码库
git clone <repo> <directory>
- repo: Git 仓库
- directory: 本地目录
注意: git clone 命令不仅会复制远程代码库中的文件和版本历史,还会创建一个远程代码库的副本(Remote Repository)的引用。通过该引用,你可以使用 git fetch、git pull 和 git push 命令与远程代码库进行交互,实现代码的同步和协作开发
基本操作
git config
该指令用来对Git 信息
进行设置。因为在创建完Git 仓库
后,还需要配置一些Git 仓库
的基本信息,这样才能进行代码提交
比如经常使用的配置用户名,密码:
git config --global user.name ""
git config --global user.email xxx@xxx.com
注意: 只有在需要提交代码到远程仓库时才需要进行这些信息的配置
git remote
该指令用于管理远程代码库
的引用。在Git
中,可以将一个或多个远程代码库
添加为本地代码库
的“远程引用”。当需要查看
或者修改
引用的远程仓库
时可以使用此命令
# 列出所有已经添加到本地代码库中的远程引用的名称
git remote
# 列出所有已经添加到本地代码库中的远程引用
git remote -v
# 添加一个新的远程引用
git remote add <name> <url>
# 删除指定名称的远程引用
git remote remove <name>
在完成了对Git 仓库
的基本信息配置和远程仓库引用信息的操作后,确定一切准备完成,那么就可以进行到下面这些在开发中会被频繁使用的指令部分了:
git add
该指令用来添加文件到暂存区
,当对工作区
代码修改完成后使用此命令将其保存到暂存区
,然后准备进行下一步的提交操作
git add <file>
<file>
是要添加到暂存区
的文件名或文件路径。如果要添加多个文件,可以在命令中指定多个文件名或路径,或者使用通配符(例如:git add *.txt
)
除了添加修改过的文件,此命令还可以添加新文件和删除文件:
- 当添加一个新文件时,
Git
会将其保存到暂存区
,以便在下一次提交时将其添加到版本库中 - 当删除一个文件时,
Git
也会将其保存到暂存区
,以便在下一次提交时将其从版本库中删除
注意: git add 命令只将文件添加到暂存区,不会将其提交到版本库中。要将文件提交到版本库中,需要执行 git commit 命令
git status
该指令用来查看本地代码仓库
当前的状态,显示有变更
的文件,当执行完git add
操作后可以通过此命令查看所有变更
的文件是否都已add
在Git
中,文件可以处于多种状态,包括已修改(modified)
、已暂存(staged)
、已提交(committed)
和已忽略(ignored)
等
git status
此命令可以列出当前处于不同状态的文件,并提供一些有用的信息,例如:哪些文件已经修改、哪些文件已经暂存、哪些文件还没有被跟踪等;还可以显示当前分支的名称、未合并的分支、未跟踪的文件和已忽略的文件等信息
git commit
该指令用来将暂存区
内容添加到本地仓库
中。当git status
指令执行后未发现有没有添加
到暂存区
的变更
,那么就可以执行此指令来commit
变更内容
在Git
中,提交
是以文件为单位进行的,因此需要将修改过的文件先添加
到暂存区
,再一次性提交所有已经添加
到暂存区
的文件
git commit -m "<commit message>"
- -m 参数用于指定
提交
时的说明信息
,也称为提交消息(commit message) <commit message>
是一个描述此次提交的字符串。在提交消息中,可以包括有关本次修改的任何有用信息,例如修改的原因、所做的更改以及可能的问题等
在执行完此命令后,Git
会将暂存区
中的所有修改保存到本地版本库
中,并生成一个新的提交对象。每个提交对象都包括一个提交消息
、作者信息
、提交时间
、父提交对象
等元数据,以及修改的文件内容
注意: 每次提交前一定要先使用 git add 命令将修改过的文件添加到暂存区,否则 git commit 命令将无法提交任何修改。其次,将修改文件 add 到暂存区后,记得再用 git status 查看一下仓库状态。此外,提交消息应该尽可能清晰和详细,以便其他人理解此次提交的含义和目的
git reset
该指令用来将当前分支指向的HEAD(即最近一次提交)
移动到另一个提交
,从而撤销之前的一些修改
回退版本,当执行完 git commit
指令后发现本次提交的内容有问题,可以执行此命令回退到期望的版本,当确认无误后,再重新执行add
、status
、commit
指令
Git
支持多种不同的reset
操作,包括软重置(soft reset)
、混合重置(mixed reset)
和硬重置(hard reset)
# 软重置
git reset --soft <commit>
#硬重置
git reset --hard <commit>
#混合重置
git reset --mixed <commit>
软重置
:将HEAD
移动到指定的提交,但不会修改暂存区
和工作目录
,因此之前的修改仍然会保留在暂存区
和工作目录
中。软重置
通常用于取消之前的一些提交,而不丢失已经修改的内容混合重置
:将HEAD
移动到指定的提交,并将暂存区
重置为指定提交的内容,但不会修改工作目录
,因此之前的修改会保留在工作目录
中。混合重置通常用于取消之前的一些提交,并将修改重新放回工作目录
中,以便进行一些其他修改和重新提交硬重置
:将HEAD
移动到指定的提交,并将暂存区
和工作目录
都重置为指定提交的内容,因此之前的所有修改都会被删除。硬重置通常用于回滚到之前的某个版本,并清除之后的所有修改。硬重置是一种非常强大和危险的操作,因为它会永久删除未提交的修改,所以在执行之前一定要小心
回退到某个分支的最新分支
git reset <method> <branch>
基于当前分支回退 n 个提交前
git reset <method> HEAD~n
- n 表示回退的提交数,为阿拉伯数字
git push
该指令用来将本地仓库
的内容推送
到远程仓库
。推送
的过程中,Git
会将本地仓库
中的提交(commit)
上传到远程仓库
,并将本地仓库
中的分支指针更新到远程仓库
中
git push <remote> <branch>
<remote>
指定了要推送到哪个远程仓库
,可以是远程仓库
的名称或 URL<branch>
指定了要推送哪个分支,本地仓库
分支名
如果本地仓库
和远程仓库
中的分支存在冲突,可能会导致推送失败。在这种情况下,通常需要先执行git pull
命令来将远程仓库
中的修改合并到本地仓库
中,然后再执行git push
命令
除了基本用法之外,git push
命令还支持许多其他的选项和参数:
git push -u <remote> <branch>
git push --force <remote> <branch>
- -u 选项将
本地分支
和远程分支
关联起来,这样在以后的推送操作中就不需要再指定分支名称了 - --force 选项用来
强制推送本地分支
,覆盖远程分支
上的修改。在使用 --force 选项时需要格外小心,因为它可能会覆盖其他人的修改
分支管理
几乎每一种版本控制系统
都以某种形式支持分支,一个分支代表一条独立的开发线,使用分支意味着可以从开发主线上分离,然后在不影响主线的同时继续工作
git branch
该指令用来列出
、创建
、删除
或重命名
分支
# 列出本地分
git branch
# 列出所有分支(包括本地分支和远程分支)
git branch -a
# 创建一个新分支
git branch <branch-name>
# 删除一个分支
git branch -d <branch-name>
# 强制删除一个分支
git branch -D <branch-name>
git checkout
该指令用来切换分支
,当切换分支
时,Git
会用该分支的最后提交的快照替换工作目录
的内容,所以多个分支不需要多个目录
# 切换到一个分支
git checkout <branch-name>
# 创建一个新分支并切换到该分支
git checkout -b <branch-name>
git merge
该指令用来合并分支
,用于将两个或多个分支的历史合并到一起,也可以选择在合并之后直接删除被并入的分支
# 合并指定分支到当前分支
git merge <branch-name>
# 合并指定分支到当前分支,并且不要快进合并
git merge --no-ff <branch-name>
# 合并指定分支到当前分支,并且使用指定的合并信息
git merge --no-ff -m "<commit-message>" <branch-name>
# 使用合并工具来解决冲突
git merge --no-ff -t <merge-tool> <branch-name>
在使用git merge
命令进行分支合并时,可能会遇到冲突。当发生冲突时,Git
会将所有冲突的文件标记为“未解决”,并将它们添加到暂存区
中。此时,需要手动解决冲突,然后使用git add
命令将解决后的文件标记为“已解决”,最后使用git merge --continue
命令完成合并
查看提交历史
git log
该指令用来查看历史提交记录
。当运行git log
命令时,它将显示最近的提交在最上面,最早的提交在最下面
# 显示当前分支的提交历史记录
git log
# 显示指定分支的提交历史记录
git log <branch-name>
# 显示指定文件的提交历史记录
git log <file-name>
# 显示提交历史记录的详细信息
git log --pretty=fuller
# 以简洁的形式显示提交历史记录
git log --oneline
git log --pretty=oneline
# 以图形化的形式显示提交历史记录
git log --graph
# 限制提交历史记录的数量
git log -n <number>
# 限制提交历史记录的时间范围,日期可以是绝对日期(如 "2022-01-01")或相对日期(如 "3 months ago")
git log --since=<date1> --until=<date2>
# 限制提交历史记录的作者
git log --author=<author-name>
# 限制提交历史记录的提交信息
git log --grep=<search-string>
# 以逆序顺序显示提交历史记录
git log --reverse
# 显示指定提交的所有修改,<commit> 是提交的哈希值或标签名称
git log -p <commit>
git blame
该指令用来查看指定文件的修改记录
,以列表形式查看指定文件的历史修改记录。它可以用来追踪代码的修改历史和找出特定行代码的贡献者
# 显示指定文件的每一行代码的作者和最后修改时间
git blame <file-name>
# 显示指定文件的每一行代码的作者、最后修改时间和提交信息
git blame -p <file-name>
# 显示指定文件的每一行代码的作者、最后修改时间、提交信息和所在的分支
git blame -p -M <file-name>
# 显示指定文件的行号范围内的信息;<start> 和 <end> 是行号范围的起始和终止行号,使用逗号分隔
git blame -L <start>,<end> <file-name>
# 显示指定文件的每一行的最后修改时间
git blame -t <file-name>
# 显示指定文件的最后修改和作者信息,并包括空白字符
git blame -w <file-name>
# 查找指定文件中的代码移动或复制
git blame -C <file-name>
# 在查找代码移动或复制时,指定相似性阈值(默认为50%);<threshold> 是相似性阈值,范围为0到100
git blame -C -C -M <threshold> <file-name>
转载自:https://juejin.cn/post/7261789163590615095