Git命令详解

添加操做

git add .                              //所有提交到暂存区

提交操做

git commit -m <description>           //提交到本地库(必须先add)
git commit -am                        //可提交未add文件,可是不包括未建立文件
git commit --amend                    //这个命令会将暂存区中的文件提交。 若是自上次提交以来你还未作任何修改(例如,在上次提交后立刻执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。

删除操做

git rm <file>             //从暂存区删除(stage)  

git rm -f <file>          //删除以前修改过而且已经放到暂存区域
git rm --cached <file>    //若是把文件从暂存区域移除,但仍然但愿保留在当前工做目录中,换句话说,仅是从跟踪清单中删除

撤销操做

在Git中,用HEAD表示当前版本。git

git HEAD
git HEAD~        //上一个版本
git HEAD~100     //往上100个版本

撤销add

git checkout <file>          //恢复未提交的更改
git reset HEAD <file>        //取消以前 git add 添加

撤销commit

图片描述

git reset

git reset --hard HEAD~              //回退到上一个版本
git reset --hard <commit ID>        //回退到指定版本

版本直接回退,简单粗暴。
若是远程分支也想要回退,git push -f (known changes)。shell

git revert

git revert HEAD                  //撤销前一次commit

不能随便删除已经发布的提交,这时须要经过revert建立要否认的提交。
图片描述缓存

若是不当心提交了不想要的代码,而小伙伴在你发现时,已经提交了,这时候就不能简单的回退版本。工具

git revert <commit ID>      //须要撤销的提交ID

这时候会有冲突,解决冲突以后,再从新提交,那么就会产生一条新的提交纪录。
提交到远程分支,git push。this

git revert 和 git reset的区别
  1. git revert是用一次新的commit来回滚以前的commit,git reset是直接删除指定的commit。
  2. 在回滚这一操做上看,效果差很少。可是在往后继续merge之前的老版本时有区别。由于git revert是用一次逆向的commit“中和”以前的提交,所以往后合并老的branch时,致使这部分改变不会再次出现,可是git reset是之间把某些commit在某个branch上删除,于是和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  3. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,可以抵消要被revert的内容。

移动或重命名操做

git mv 命令用于移动或重命名一个文件、目录。spa

git mv <file> 
git mv <old name>  <new name>

其实,运行 git mv 就至关于运行了下面三条命令:code

mv README.md README
git rm README.md
git add README

git rebase

git rebase和git merge区别
图片描述
图片描述
在rebase的过程当中,也许会出现冲突(conflict)。 在这种状况,Git会中止rebase并会让你去解决冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 而后,你无需执行 git-commit,只要执行:索引

git rebase --continue      //继续
git rebase --abort         //取消

git rebase -i

在rebase指定i选项,您能够改写、替换、删除或合并提交。图片

git rebase -i  [startpoint]  [endpoint]

其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操做,[startpoint] [endpoint]则指定了一个编辑区间,若是不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。ip

  • pick:保留该commit(缩写:p)
  • reword:保留该commit,但我须要修改该commit的注释(缩写:r)
  • edit:保留该commit, 但我要停下来修改该提交(不只仅修改注释)(缩写:e)
  • squash:将该commit和前一个commit合并(缩写:s)
  • fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行shell命令(缩写:x)
  • drop:我要丢弃该commit(缩写:d)

合并历史纪录

git rebase -i HEAD~2

//咱们会进入vit模式,将pick改为squash,而后按esc : wq(保存并退出)。

git push -f

图片描述
图片描述

git status

要查看哪些文件处于什么状态。

git status -s | git status --short          //获得一种更为紧凑的格式输出

git diff

git diff 命令显示add与commit的改动区别。

git diff  <file>            //还没有缓存的改动
git diff --cached           //查看已缓存的改动
git diff HEAD               //查看已缓存的与未缓存的全部改动
git diff --stat             //显示摘要而非整个 diff

查看提交历史

git log

在提交了若干更新,又或者克隆了某个项目以后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log 命令。

git log -p          //用来显示每次提交的内容差别
git log -2          //仅显示最近两次提交
git log --stat      //每次提交的简略的统计信息
git log --pretty    //指定使用不一样于默认格式的方式展现提交历史,git log --pretty=oneline
使用git show命令查看某一次提交详细信息。

git reflog

若是在回退之后又想再次回到以前的版本,git reflog 能够查看全部分支的全部操做记录(包括commit和reset的操做),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录。
git reflog

git stash

在Git中,隐藏操做将使您可以修改跟踪文件,阶段更改,并将其保存在一系列未完成的更改中,并能够随时从新应用。

git stash          //把当前工做的改变隐藏起来
git stash list     //查看已存在更改的列表
git stash pop      //可从堆栈中删除更改并将其放置在当前工做目录中

分支操做

建立分支

git branch <branch name>               //建立分支
git checkout <branch name>             //切换到分支

git checkout -b <branch name>          //建立并切换到分支

删除分支

git branch -d <branch name>
git branch -D <branch name>       //强制删除分支

查看分支

git branch <name>
git branch -a      //查看全部分支
git branch -r      //查看远程分支

重命名分支

git branch -m <old name> <new name>

合并分支

git checkout master                    //切换到master
git merge <branch name>                //合并分支

若是分支未pull最新代码,那么提交的时候,历史纪录就不清晰;汇合分支上的提交,而后一同合并到分支
图片描述

git merge –squash <branch name>
git commit -am
git push

提取其余分支提交

在cherry-pick,您能够从其余分支复制指定的提交,而后导入到如今的分支。

git cherry-pick <commit id>

标签操做

若是你达到一个重要的阶段,并但愿永远记住那个特别的提交快照,你可使用 git tag 给它打上标签。

建立标签

git tag <name>
git tag -a <name>              //建立一个带注解的标签

查看标签

git tag
git show <tag name>
git push origin <tag name>

删除标签

git tag -d <name>

提交空文件夹

  • 在空文件夹内新建.gitignore文件,并写上以下:
#Ignore everything in this directory
*
#Except this file
!.gitignore
  • 咱们也能够建立个对项目无影响的文件,如 .gitkeep 名字你们随意便可
相关文章
相关标签/搜索