likes
comments
collection
share

Git 指令篇

作者站长头像
站长
· 阅读数 16

Git 指令

本篇文章将会从创建仓库基本操作分支管理查看提交历史这几方面来对一些通用指令进行说明,其中基本操作部分最为重要,因为它包括的指令是我们在平常开发的流程中执行最频繁的

创建仓库

创建git 仓库有两种方法:

  1. 将本地的项目初始化为git 仓库
  2. 克隆远程的仓库到本地

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指令后发现本次提交的内容有问题,可以执行此命令回退到期望的版本,当确认无误后,再重新执行addstatuscommit指令

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>