之前我写过一篇Git Submodule的笔记。这期间我隔了很久没有使用git,现在捡起来,发现都生疏了,所以还是在这里对常用的几个命令做个整理。

最基本的几个个命令:

git clone username@host:/path/to/repository

检出远端服务器上的仓库

git add

将文件提交到暂存区

git commit

修改你本地的HEAD

git push (远程仓库名) (分支名)

将本地的改动提交到远程仓库

比如说你要提交到远端的master分支:git push origin master。其实这个命令的意思是把本地的master分支提交到远程的master分支,也就是git push origin refs/heads/master:refs/heads/master,一般都会省略refs/heads,变成git push origin master:master,如果你想提交到不同名的远程分支dev,那么可以这样:git push origin master:dev


还有一些与协作有关的命令

git pull

让你的本地分支更新到最新版本。这个命令其实是git fetchgit merge的合并。

这个命令的用处主要是:当多人协作的时候,比如说都在dev分支开发,别人提交了一部分代码到远程dev分支,这个时候你本地的dev已经不是最新的了,所以要使用git pull拉取别人提交的代码。

如果别人的代码与你本地的有冲突,那么就要手动解决冲突。

git branch

查看分支。

git branch -a查看本地和远程所有分支。*所在的那个分支就是你当前的分支。

git checkout <branchname>

切换分支。

比如说你想要切换到dev分支,那么可以使用命令git checkout dev

git checkout -b <newbranchname>

在本地新建分支,并切换到该分支。

比如说你想要在本地新建一个test分支,那么可以使用命令git checkout -b test

git branch -d <needdeletebranchname>

删除本地分支。

比如说你想要删除本地的test分支,那么可以使用命令git branch -d test

git push orgin <localbranchname>:<remotebranchname>

将本地新建的分支,提交到远端。

这个命令和本文最开始提到的是一样的。当远端没有指定的分支的时候,就会创建一个分支。这样就达到了将本地新建的分支提交到远端的目的。


git status

查看你本地库有什么改动。

  • Untracked files表示这些文件都没有添加到版本库里面,还没被追踪记录。
  • Changes not staged for commit表示有改动需要被记录且提交到暂存区的文件。
  • Changes to be committed表示这些文件需要提交

git log

查看提交历史。(按q可以退出查看)

git log 示例

看上方的图,最近一次提交是2017-12-22 18:04:06的时候,commit-id179d67d74……,还可以看到具体的文字描述。

git reset

撤回提交,且不留痕迹。

git before commit

git after commit

看上面这个图,比如说你在本地基于B进行了改动,并且commit了,那么结果如下图所示,你的HEAD已经从B指向了最新的节点C

git commit and reset C-B

这个时候,如果你想撤回刚才那次commit,那么就可以使用git reset <commit-id>来撤销刚刚的提交。按照上图所示,你想撤销C这次commit,而C的前一次B的commit是8888,那么就可以使用git reset 8888,这样一来,HEAD指向了B,你本地的文件还是处于Changes not staged for commit状态,达到了目的。

git reset multi C-A

上面只是演示了撤销一次,如果想要撤销多个commit呢?那么只需要在git reset <commit-id>里面写上你让HEAD指向的那个节点的commit-id。(比如说想要撤销到A,那么命令是git reset 1111)被撤销的这些commit里面的文件改动,都在你本地没丢失,你都可以在git statusChanges not staged for commit里面看到。

git diff

查看本地文件与HEAD所指的文件的区别。

如果要看单独某个文件的diff,可以使用gif diff <filepath>在里面明确指明某个文件的路径。


暂时就写到这里,以后再继续更新~