1. # 新建仓库
  2. git init
  3. git clone [url]
  4. # 代码提交
  5. git add <filename> git commit -m"注释"
  6. git push
  7. # 版本恢复
  8. git reset
  9. # 代码拉取
  10. git pull
  11. # 分支操作
  12. git branch <branchName>
  13. git checkout <branchName>
  14. git merge <branchName>
  15. # 信息查看
  16. git status
  17. git log
  18. git reflog
  19. git config -l

强制覆盖本地代码

与git远程仓库保持一致

  1. # 多行执行
  2. git fetch --all
  3. git reset --hard origin/master
  4. git pull
  5. # 单条执行
  6. git fetch --all && git reset --hard origin/master && git pull

创建git仓库

创建**git**仓库包含两种方式,效果都是一样的:

  • git init:本地创建后推送到远程服务器
  • git clone:远程服务器创建后克隆到本地

    git init

    git init 在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。执行后会在当前文件夹中多出一个.git文件夹,Git相关信息都在里面。

    **.git**文件夹是隐藏的 如果看不到需要调整系统设置让其显示隐藏文件夹

  1. $ git init
  2. Initialized empty Git repository in C:/Users/xxxx/Desktop/gitte/.git/

git clone

当然,也可以在远程服务器上拉取代码,拷贝一个 Git 仓库到本地

  1. $ git clone [url]
  2. # 例如 git@github.com:xxx/xxxx.git

代码提交

假如已经通过git clone从远程服务器上拉取了一下git仓库到本地了。然后在本地进行了一些编辑,比如:新增了一个test.txt文件

git status 查看当前文件的状态

可以通过git status查看当前文件的状态,由于是新增的文件,还未加入 git 追踪,所以当前test.txt为Untracked状态

  1. $ git status
  2. On branch master
  3. No commits yet
  4. Untracked files:
  5. (use "git add <file>..." to include in what will be committed)
  6. test.txt
  7. nothing added to commit but untracked files present (use "git add" to track)

git add 将文件添加到暂存区

在本地(Working Directory)将文件修改完成后使用git add命令可将该文件添加到暂存区 (Index)

  1. # 添加单个文件
  2. git add filename
  3. # 添加所有文件
  4. git add .
  5. # 将test.txt文件添加到Index
  6. git add test.txt

git commit 提交到本地仓库

使用 git add 命令是将已经更新的内容写入缓存区, 而执行git commit将缓存区内容提交到本地仓库中(Repository)。

  1. # 提交Index中的文件 执行后会进入写注释的界面
  2. git commit
  3. # 提交时直接写注释
  4. git commit -m"注释"
  5. # 例如提交test.txt文件
  6. git commit -m"新增test.txt文件"

git push 推送到远程仓库

在执行git commit将缓存区内容添加到本地仓库中后,可以使用git push将本地的修改推送到服务器上的远程仓库中,这样其他人就可以同步了。

  1. git push [主机名] [分支名]
  2. # 推送到origin主机的master分支 其中origin是默认的主机名
  3. git push origin master

git pull 拉取远程仓库代码

在其他人提交代码后,可以通过git pull命令拉取服务器代码到本地。

  1. git pull [主机名] [分支名]
  2. # 拉取origin主机的master分支最新代码 其中默认的主机名是origin
  3. git pull origin master
  4. # 直接git pull 则会拉取当前分支最新代码

分支操作

创建项目后默认在master分支, 即主分支,应保证**master**分支代码永远是正确的,稳定的,可运行的,所以正常开发是不会直接在master分支上修改的。

git branch 创建分支

实际开发时一般会根据功能创建多个分支,或者每个开发者创建一个自己的分支。

  1. # 创建分支branchName
  2. git branch branchName
  3. # 切换到分支branchName
  4. git checkout branchName
  5. # 创建并切换到分支branchName
  6. git checkout -b branchName
  7. # 例如创建一个dev分支
  8. git branch dev git checkout dev
  9. # 或者用下面这句 二者是等效的
  10. git checkout -b dev

git merge 合并分支

在新建的分支开发完后需要进行合并,将新的功能代码合并搭到master分支,当然也可以合并到任意分支。

  1. # 会把branchName分支合并到`当前`分支
  2. git merge branchName
  3. # 例如dev分支开发完成 合并到master分支
  4. git checkout master gir merge dev

一般情况下并不会直接合并到master分支,而是先pull最新的master分支合并到自己的分支,然后没问题了在合并到master分支。
完整流程如下:

  1. #1 创建功能分支
  2. (master) git checkout -b feature
  3. #2 功能迭代
  4. (feature) git commit ...
  5. #3 合并最新主分支代码
  6. (feature) git checkout master
  7. (master) git pull
  8. (master) git checkout feature
  9. (feature) git merge master
  10. # 解决冲突(如果有的话)
  11. #4 review,修改代码 再次提交
  12. (feature) git commit
  13. #5 没问题后再次合并到主分支
  14. (feature) git checkout master
  15. # --squash参数可加可不加 具体作用现在先不用管
  16. (master) git merge feature --squash
  17. (master) git commit
  18. # 推送到远端,正常结束
  19. (master) git push origin
  20. #6 如果上一步被拒绝,是因为master有更新的代码入库了,为了防止master上出现分线,需要重新执行第5步

git branch -d 删除分支

合并完成后即可删除开发时创建的分支。

  1. # 删除分支branchName d->delete
  2. git branch -d branchName
  3. # 例如删除前面的功能分支
  4. git branch -d feature

其他操作

git diff 查看文件与之前的区别

执行git diff命令来查看文件与之前的区别。

  1. # 查看本地工作区和index区域的文件的区别
  2. git diff
  3. # 查看Index区域与Repository区域的区别
  4. git diff --cached
  5. # 查看所有文件与本地仓库的区别
  6. git diff HEAD
  7. # 只显示摘要而不是全部显示
  8. git diff --stat

git reset 恢复

撤销命令,git中比较重要的命令之一了。

  1. git reset [恢复等级] [commitId]

soft/mixed/hard
git reset 有三个参数,可以看做是三个恢复等级。
git reset –soft 仅仅将commit回退到了指定的提交 ,只修改Repository区域 git reset –mixed用指定的commit覆盖Repository区域和Index区,之前所有暂存的内容都变为未暂存的状态 (默认为该参数)
git reset –hard 使用指定的commit的内容覆盖Repository区域、Index区和工作区。(危险!!! 此操作会丢弃工作区所做的修改!需谨慎!!!)

具体如图:

commidID
表示将要恢复到哪个版本。有如下几种表示法

HEAD:表示当前最新的一次提交,(HEAD^)表示倒数第二次提交,(HEAD^^)表示倒数第三次提交,倒数第100次提交则是HEAD^^…^^^ 100个^,当然不会这么傻,还有另外一种写法HEAD~100 就是倒数第100次了。当然还可以使用具体的commitID

git log 查看提交历史

使用git log可以查看到提交历史,其中就包含了commitID

  1. $ git log
  2. #这个是最新的一次提交的commitId
  3. commit 06f1cd144f57c38d6fdbed07616af8ed5d69a9ea(HEAD -> hexo, origin/hexo, origin/HEAD)
  4. Author: Jinyangzi <Jinyangzi@163.com>
  5. Date: Sat Feb 16 17:51:18 2019 +0800
  6. 添加Git工作区概念详解
  7. commit 8f8908ff3edbba0d24d7eee7682e09d002faee6f # 这个就是commitId
  8. Author: Jinyangzi <Jinyangzi@163.com>
  9. Date: Fri Feb 15 19:10:06 2019 +0800
  10. fix建造者模式两种写法
  11. commit 71a44acd12d427f694f554df1d2f26ad59df5978 #这个就是commitId
  12. Author: Jinyangzi <Jinyangzi@163.com>
  13. Date: Fri Feb 15 00:31:33 2019 +0800
  14. fix 单例模式+Git 常用命令
  15. commit 099675715979832baa107f9da080bfd38d3d63e0 #这个就是commitId
  16. Author: Jinyangzi <Jinyangzi@163.com>
  17. Date: Thu Feb 14 23:26:10 2019 +0800

所以git reset有多种写法

  1. git reset HEAD
  2. # Repository和Index恢复到最后一次提交的状态 不影响工作区
  3. git reset HEAD test.txt
  4. #只恢复test.txt 文件
  5. git reset --soft HEAD
  6. #Repository恢复到最后一次提交的状态
  7. git reset --hard HEAD
  8. #Repository、Index和工作区都恢复到最后一次提交的状态 丢弃工作区所有内容
  9. git reset 099675715979832baa107f9da080bfd38d3d63e0
  10. #恢复到commitID版本 一般不用写完整的commitid 写前几位git就可以分辨出来了

git reflog

前面的git reset可以恢复到各个版本,但是若恢复到前面的版本了,那么在使用git log查看是就找不到后面的提交了,想要恢复到后面的版本时就可以使用git reflog查看,该命令可以看到所有的版本改动信息。

  1. git log commit 86a08a6fbacffcf93f7b4dd94be4a21ca31682c4 (HEAD -> master)
  2. Author: lillusory <xueduanli@163.com>
  3. Date: Sat Feb 16 18:29:48 2019 +0800
  4. 新增test.txt
  5. git reflog
  6. 86a08a6 HEAD@{1}: reset: moving to HEAD^
  7. b9802c7 (HEAD -> master) HEAD@{2}: commit: 添加内容1111
  8. 86a08a6 HEAD@{3}: commit (initial): 新增test.txt

Tag

git tag [tag] 创建标记

git push origin [tag] 推送标记

git push origin —tags 推送所有标记

  1. * [new tag] v1.0.1 -> v1.0.1
  2. ! [rejected] v1.0.0 -> v1.0.0 (already exists)

Git常用命令速查表

GIT常用命令 - 图1