初始化设置用户名和邮箱
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 |
这说明你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过。 此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪状态的新文件,否则 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.别名 命令
如果命令是单个则不需用加引号,如果命令很长有空格就需要加引号,比如查看项目分支历史这个命令就需要加引号包裹起来。
遇到了本地未同步远程仓库的情况时
比如,终端出现这种提示:

我们应该这样做:
git stash – 保存自己的代码
git pull origin dev – 拉取代码(dev 是远程仓库的名字)
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