git经常使用命令详解

  git是咱们经常使用的代码提交工具,可是有不少命令行要记,对于习惯这些命令的新手来讲是一件很蛋疼的事,故本人在此记录了一些经常使用的命令,以供你们参考。若有不对之处,还请各位大虾多多指正。git

git代码克隆

1.主模块代码拉取

  主模块拉取的命令很简单,相信用过git的童鞋都会:github

git clone https://github.com/bendidi/Tracking-with-darkflow.git

2.子模块代码拉取

  将主模块代码拉取下来之后会发现主体工程代码目录下面有一些空目录,如deep_sort、sort、darkflow,这些子模块均为空目录。缘由是这些目录均为submodule,隶属于第三方的git工程。这是为了解决不一样git工程之间可以相互引用,而彼此之间又能保证相互独立才引入子模块的概念。拉取子模块的方法以下:缓存

git submodule update --init --recursive

  若是你细心观察,你会发现包含子模块的工程主目录下都会存在一个.gitmodules(隐藏文件),里面的内容以下:
[submodule "deep_sort"]安全

path = deep_sort
url = https://github.com/bendidi/deep_sort.git

[submodule "sort"]服务器

path = sort
url = https://github.com/bendidi/sort.git

[submodule "darkflow"]工具

path = darkflow
url = https://github.com/bendidi/darkflow.git

  文件中记录的子模块对应的文件名和git路径,git submodule update --init --recursive就是根据此文件来拉取子模块工程url

3.同时拉取全部模块代码

  看完上面两步以后,估计不少童鞋内心都有个疑问:
  我拉取个代码还搞这么麻烦,有没有简单一点的方法,能够一步到位?
  这位老细你有运了,我这里恰好有一粒:spa

git clone --recursive https://github.com/bendidi/Tracking-with-darkflow.git
给git clone传递--recursive选项,git clone命令会自动初始化并更新仓库中的每个子模块。

正常代码提交流程

  git正常的代码提交流程能够分为如下几步:命令行

1.文件的增删改

  1.git add $(filepath)/filename
  在git中增长须要增长或者修改的文件名
  2.git rm $(filepath)/filename
  在git中删除指定文件路径的文件
  3.git mv filename1 filename2
  修改移动指定文件名
  4.git status
  查看当前代码提交状态,可根据提交状态来校对目前的修改跟预期的提交是否相符。日志

2.代码的本地提交

  通过第一步的代码的增删改操做后,将进入本地提交环节,提交后代码将保存在本地,但不会上传的git服务器,操做命令以下:

git commit

  提交时如须添加修改备注,能够在git commit -m "备注信息:xx修改",也能够在git commit后的命令行中添加。
  本地提交以后,有时你会发现,还有其余的改动忘了提交,怎么办呢?
  很简单,将忘了提交的改动从新走一遍步骤1,而后使用:

git commit --amend

  进行追加提交,便可完成本地补充提交代码。

3.代码的远程服务器提交

  当代码提交到本地后,就能够将代码提交到主干,命令以下:

git push origin HEAD:refs/for/master

主干上版本更新后如何合并提交本身的代码

  按正常提交流流程commit代码后,若主线版本比本地版本新,直接提交代码到主线将会报冲突,此时能够尝试使用以下方法来解决:

1. git stash

  git stash用于将当前工做区的修改暂存起来,就像堆栈同样,能够随时将某一次缓存的修改再从新应用到当前工做区

2. git pull

  拉取线上最新代码.

3.git stash pop

  恢复/合并线上代码和本身的代码

此时再将代码提交到主干将不会报冲突,但新代码和本身修改的代码有没有相互重叠的修改致使不可预测的后果,须要提交者本身检视代码来保证。

代码回退

1.git log
查看最近代码提交日志,能够按上下箭头浏览,内容以下:

clipboard.png

2.git checkout $(committed)

  使用git checkout $(committed)能够将代码回退到指定的提交版本

若是代码回退后须要恢复到当前主线最新版本,可使用:
    git reset --hard origin/master

  将代码恢复到当前主线最新版本。

reset以后如何恢复到上一次commit点

1.git reflog
使用git reflog查看以前的commit记录,以下所示:
$ git reflog
b7057a9 HEAD@{0}: reset: moving to b7057a9
98abc5a HEAD@{1}: commit: more stuff added to foo
b7057a9 HEAD@{2}: commit (initial): initial commit

2.git reset --hard 98abc5a
reset完后代码便可回退到以前提交的版本

reset --hard 和checkout的区别

1.git reset --hard $(committed)
放弃本地修改,将代码回退到指定commit版本,本地代码的HEAD也会随着本次reset的提交点而移动到对应的分支/主线
2.git checkout $(committed)
放弃本地修改,将代码回退到指定commit版本,本地代码的HEAD不会随着checkout的commitid移动。
区别:
1.checkout对工做目录时安全的,它会经过检查来确保不会将已更改的文件弄丢。而 reset --hard 则会不作检查就全面地替换全部东西。
2.使用git reset --hard时HEAD会随着commit的不一样而移动,而使用git checkout时HEAD不会随着commit点的不一样而移动。
相关文章
相关标签/搜索