引言
git是一个分布式版本控制系统,它被广泛用于追踪文件的更改和协助多人合作开发,程序员必备知识,但是git命令繁多,所以把它整理起来
必备知识
初始化本地仓库:git init
用于初始化一个新的 Git 仓库,当你在一个新目录中执行 git init时,Git 会创建一个名为 .git的子目录,这个子目录包含了所有的必要文件和元数据,用于跟踪你的项目的版本
git init
如果想要初始化一个 Git 仓库到一个特定的目录,而不是当前目录,可以使用这个命令
git init 目录名称
如果这个目录已经存在,Git 会在这个目录中创建一个新的 .git子目录,并将其初始化为一个 Git 仓库。如果这个目录不存在,Git 会创建该目录,并在其中初始化一个新的 Git 仓库
克隆远程仓库:git clone
用于从远程仓库复制一个 Git 仓库到本地,这个命令会创建一个本地仓库的副本,包括所有文件的版本历史记录,还会自动设置远程仓库的名称为 origin
git clone 远程地址
执行这个命令后,Git 会自动创建一个跟仓库同名的目录,并将远程仓库的内容克隆到这个目录中,这个目录也会包含一个 .git子目录,其中包含了所有的版本控制信息
如果你不想目录跟仓库同名,可以这样
git clone 远程地址 指定名称
Git 会在当前目录下创建一个名为你自己指定的名称的目录,并将远程仓库的内容克隆到这个目录中。
添加文件到暂存区:git add
用于将文件更改添加到暂存区,提交代码时需要先将要提交的更改添加到暂存区,然后才能将这些更改提交到仓库
git add 添加到暂存区的文件的路径
如果您想要添加当前目录下的所有文件,可以这样,. 是通配符
git add .
添加所有已跟踪的文件的更改和删除,但不包括未跟踪的文件
git add -u 或 git add --update
添加所有更改,包括已跟踪文件的更改、删除和未跟踪的文件
git add -A 或 git add --all
提交更改:git commit -m
用于将暂存区中的更改提交到仓库
git commit -m "提交信息"
查看远程仓库的状态:git status
用于查看当前仓库的状态,提供了有关工作目录、暂存区和最近提交的信息,包括哪些文件被修改了、哪些文件被添加到暂存区以及哪些文件尚未被跟踪
git status
执行这个命令后,Git 会显示当前所在的分支、暂存区中等待提交的更改(如果有)、工作目录中未被暂存的更改(即已修改但未添加到暂存区的文件)、未被跟踪的新文件(即尚未被 Git 记录的文件)、被忽略的文件(如果配置了 .gitignore文件)
获取最新的提交:git fetch
用于从远程仓库获取最新的提交,并将它们存储在本地仓库的远程跟踪分支上
git fetch 仓库名 本地分支名
获取最新的提交:git pull
用于从远程仓库获取最新的提交,并将它们合并到当前分支
git pull 仓库名 本地分支名
从名为 origin的远程仓库获取名为 master的分支的最新提交,并将它们合并到本地master分支
git pull origin master
推送到远程仓库:git push
用于将本地分支的更改推送到远程仓库,如果没有指定分支,会默认推送到名为 master的分支
git push 远程仓库名 分支名
推送到名为 origin的远程仓库的 master分支
git push origin master
推送两个分支
git push 远程仓库名 分支名1 分支名2
从暂存区删除文件:git reset
用于将当前分支的头部(即指针)重置到一个指定的状态,常用于撤消之前的提交、撤销暂存区的更改或者将文件从暂存区中移除
git reset 操作 提交哈希
这个命令有三种操作,如:
只移动 HEAD 指针,不改变暂存区和工作目录
git reset --soft 提交哈希
移动 HEAD 指针,并重置暂存区,但不改变工作目录,如果没有指定操作,则默认这个
git reset --mixed 提交哈希
移动 HEAD 指针,并重置暂存区和工作目录,这样会丢弃所有未提交的更改
git reset --hard 提交哈希
案例:
撤销上一次提交并保留工作目录中的更改
git reset --soft HEAD~1
永久删除最近的提交以及工作目录和暂存区中的所有更改
git reset --hard HEAD~1
移除暂存区中指定的文件,但保留工作目录中的更改
git reset HEAD 文件目录
移动、重命名文件:git mv
用于移动或重命名一个文件或目录,如移动一个文件
git mv 当前文件路径/当前文件 想要移动的路径/当前文件
重命名一个文件
git mv 当前文件 当前文件新名称
删除文件:git rm
用于从工作目录和暂存区中删除文件
git rm 操作 想要删除的文件
强制删除文件,即使它在 .gitignore 文件中被忽略了
git rm -f 想要删除的文件
只从暂存区中删除文件,但保留在工作目录中
git rm --cached 想要删除的文件
在删除文件后,可以使用git commit命令来提交这次更改,这样文件的删除就被记录在Git 仓库历史中
git commit -m "删除了 xxx.txt 文件"
显示分支:git branch
用于查看、创建、删除和重命名分支
git branch 操作 分支名
查看分支的最后一次提交
git branch -v 分支名
查看哪些分支已经合并到当前分支
git branch --merged 分支名
查看哪些分支尚未合并到当前分支
git branch --no-merged 分支名
删除分支
git branch -d 分支名
强制删除分支(即使它有未合并的更改)
git branch -D 分支名
重命名当前分支
git branch -m 分支名
查看所有分支,包括远程跟踪分支
git branch -a 分支名
创建分支
git branch 分支名
切换分支:git checkout
用于切换分支或恢复工作树文件
git checkout 分支名
创建分支并切换到这个分支
git checkout -b 分支名
撤销对指定文件的更改,将其恢复到指定提交时的状态
git checkout 指定提交 指定文件
放弃所有未提交的更改,将工作目录恢复到最后一次提交的状态
git checkout . 或 git checkout -- .
合并分支:git merge
用于将两个或多个分支的更改合并在一起,在执行合并操作之前,先确保当前分支是最新的,以避免合并冲突
git merge 操作 分支名
禁用快速前进(fast-forward)合并,即使可以快速前进,也会生成一个新的合并提交
git merge --no-ff 分支名
将指定分支的更改压缩到当前分支的一个提交中,而不是创建一个合并提交
git merge --squash 分支名
在合并时提供合并提交的提交消息
git merge -m <消息> 分支名
合并指定分支到当前分支
git merge 指定分支
合并之前先执行 git pull或git fetch,如果要合并到 master 分支的话,执行git merge origin/master
创建提交:git revert
用于创建一个新的提交,该提交会撤销某个早期提交的更改
git revert 操作 提交哈希
只准备撤销,不自动创建提交
git revert -n 或 --no-commit 提交哈希
在提交消息中添加一个 Signed-off-by 行
git revert --signoff 提交哈希
撤销指定提交的更改并创建一个新的提交
git revert 指定提交
显示提交历史:git log
git log
执行这个命令后,会每个提交的哈希值、作者、日期和提交消息,在默认情况下,会显示所有分支的提交历史
将每个提交压缩到一行,只显示哈希值和提交消息
git log --oneline
查看最近的三条提交记录,并且希望每条记录只显示一行
git log --oneline -n 3
显示对未暂存文件的更改:git diff
用于查看工作目录、暂存区或提交之间的更改,显示两个状态之间的差异
git diff
查看暂存区和最新提交之间的差异
git diff --cached 或 git diff HEAD
比较当前工作目录和特定提交之间的差异
git diff 提交哈希
保存当前工作状态:git stash
用于保存当前工作状态以便稍后恢复,当需要暂时离开当前工作,例如开始修复一个紧急问题,或者需要合并一个新分支,但不想丢失当前的工作进度,您可以使用这个命令来保存当前的状态。
git stash
查看存储的堆栈记录,包括创建时间、提交哈希和堆栈记录的名称
git stash list
恢复第一个存储的堆栈记录
git stash pop stash@{0}
显示第一个存储的堆栈记录的详细信息,包括文件差异
git stash show stash@{0}
**操作远程仓库:git remote
用于查看和操作远程仓库,可以查看远程仓库的列表、获取远程仓库的详细信息,或者为远程仓库重命名
git remote 操作 仓库名
查看所有远程仓库的列表
git remote -v
获取特定远程仓库的详细信息
git remote show 仓库名
远程仓库重命名,不会更改其 URL
git remote rename 仓库名 仓库新名
添加远程仓库
git remote add 仓库名 仓库地址
删除远程仓库
git remote remove 仓库名
暂时就这么多啦
goodBye~
下班~