git知识点

初始化设置用户名和邮箱

git config --global --list

git config --global user.name "xxx"

git config --global user.email "xxx"

克隆现有的仓库

git clone <url>

如果我们想获得一份已经存在仓库,那么我们可以使用 git clone <url>。(url 项目路径)比如:git clone https://github.com/libgit2/libgit2

如果我们想在克隆远程仓库时,自定义自己的本地仓库名,那么我们可以设置参数来指定新的目录名。就比如我们想将克隆的仓库放到 mylibgit 目录中:

git clone https://github.com/libgit2/libgit2 mylibgit

初始化仓库

git init <project-name>

project-name 为初始化目录名称,不设置则在当前目录创建

当我们将目录切换到当前项目目录之后,使用 git init 对仓库进行初始化。

检查当前文件状态

git status

git status -s 输出简洁信息

我们可以用 git status 命令查看文件分别哪些状态。

如果在克隆仓库后立即使用此命令,会看到类似这样的输出:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

这说明你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过。 此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪状态的新文件,否则 Git 会在这里列出来。 最后,该命令还显示了当前所在分支,并告诉你这个分支同远程服务器上对应的分支没有偏离。 现在,分支名是“master”,这是默认的分支名。

跟踪新文件(添加)

git add <file> file 文件名,添加一个文件到仓库

git add . 添加所有文件到仓库

git add <file> 跟踪新文件、把已跟踪的文件放到暂存区域、用于合并时把有冲突的文件标记为已解决状态等。

当然当我们运行了 git add 命令之后,又对文件进行了修改的话,那么就需要重新运行 git add ,把现在最新的版本重新暂存起来。

提交更新(将暂存区提交到版本库)

git commit -m <message> 提交暂存区的文件到仓库

git commit -am <message> 提交暂存区所有的文件到仓库

现在的暂存区已经准备就绪,可以提交了。 在此之前,请务必确认还有什么已修改或新建的文件还没有 git add 过, 否则提交的时候不会记录这些尚未暂存的变化。 这些已修改但未暂存的文件只会保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了, 然后再运行提交命令 git commit。也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行:git commit –m "描述"

提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较

跳过使用暂存区域

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:git commit -a

回顾提交历史

git log 命令回顾提交历史

分支

创建分支:git branch <branch-name> branch-name 分支名

切换分支:git checkout <branch-name>

合并分支:git merge <branch-name>

删除分支:git branch -d <branch-name>

强制删除分:git branch -D <branch-name>

打标签:git tag <tag-name> 给当前的提交打上标签,通常用于版本发布

查看分支列表:git branch

查看分支指向的最新的提交:git branch -v

查看合并到当前分支的分支列表:git branch --merged

查看没有合并到当前分支的分支列表: git branch --no-merged

在指定的提交对象上创建新分支:git branch 文件名 commithash

查看每一个分支的最后一次提交:git branch -v

撤销

移动一个文件到新位置:git mv <file> <new-file>

从工作区和暂存区删除一个文件,然后暂存删除操作:git rm <file>

只从暂存区删除一个文件,工作区中的文件没有变化:git rm --cached <file>

恢复一个文件到之前的版本:git checkout <file> <commit-id>

创建一个新的提交,用来撤销指定的提交,后者的所有变化都会被前者抵消,并且应用到当前分支:git revert <commit-id>

撤销暂存区的文件,重新放回工作区(git add 的反向操作):git restore --staged <file>

查看

查看未暂存修改git diff

查看未提交暂存git diff --cache

查看提交记录(–oneline可以省略):git log --oneline

查看两个提交之间的差异:git diff <commit-id> <commit-id>

远程仓库

添加:git remote add <remote-name> <remote-url>

查看:git remote -v

删除:git remote rm <remote-name>

重命名:git remote rename <old-name> <new-name>

拉取代码:git pull <remote-name> <branch-name>

推送代码:git push

查看远程分支:git branch -r

获取所有远程分支:git fetch <remote-name>

fetch某一个特定的远程分支:git fetch <remote-name> <branch-name>

其他

删除:git rm 要删除的文件

重命名:git mv 老文件 新文件

推送:git push 别名 分支

拉取:git pull

查看项目分叉历史

git log –oneline –decorate –graph –all

给命令设置一个别名

git config --global alias.别名 命令

如果命令是单个则不需用加引号,如果命令很长有空格就需要加引号,比如查看项目分支历史这个命令就需要加引号包裹起来。

遇到了本地未同步远程仓库的情况时

比如,终端出现这种提示:

image-20221207171819767

我们应该这样做:

  1. git stash – 保存自己的代码

  2. git pull origin dev – 拉取代码(dev 是远程仓库的名字)

  3. git stash pop – 恢复自己的代码

因为上面的错误是我们将代码提交到本地仓库后,准备提交到远程仓库去才会报的错。

所以在进行 git stash 和 git stash pop 时,会显示:No local changes to save。

也就是说本地已经提交了,就直接pull就行,本地没有提交,又想拉取最新代码,就stash保存。

修改最新的commit文字

命令:git commit –amend

以下是使用:phpstorm 软件的操作,其他软件应该类似:

按下 i 进入 vim 编辑器,编辑完成,按下 alt + enter 退出 vim 编辑效果,输入 :wq 保存。

回退版本

git reset --hard '版本commit id'

直接去仓库复制要回退版本的提交 id 就可以了。

再次提交需要强制推送
git push -f