git是咱们经常使用的代码提交工具,可是有不少命令行要记,对于习惯这些命令的新手来讲是一件很蛋疼的事,故本人在此记录了一些经常使用的命令,以供你们参考。若有不对之处,还请各位大虾多多指正。git
主模块拉取的命令很简单,相信用过git的童鞋都会:github
git clone https://github.com/bendidi/Tracking-with-darkflow.git
将主模块代码拉取下来之后会发现主体工程代码目录下面有一些空目录,如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
看完上面两步以后,估计不少童鞋内心都有个疑问:
我拉取个代码还搞这么麻烦,有没有简单一点的方法,能够一步到位?
这位老细你有运了,我这里恰好有一粒:spa
git clone --recursive https://github.com/bendidi/Tracking-with-darkflow.git 给git clone传递--recursive选项,git clone命令会自动初始化并更新仓库中的每个子模块。
git正常的代码提交流程能够分为如下几步:命令行
1.git add $(filepath)/filename
在git中增长须要增长或者修改的文件名
2.git rm $(filepath)/filename
在git中删除指定文件路径的文件
3.git mv filename1 filename2
修改移动指定文件名
4.git status
查看当前代码提交状态,可根据提交状态来校对目前的修改跟预期的提交是否相符。日志
通过第一步的代码的增删改操做后,将进入本地提交环节,提交后代码将保存在本地,但不会上传的git服务器,操做命令以下:
git commit
提交时如须添加修改备注,能够在git commit -m "备注信息:xx修改",也能够在git commit后的命令行中添加。
本地提交以后,有时你会发现,还有其余的改动忘了提交,怎么办呢?
很简单,将忘了提交的改动从新走一遍步骤1,而后使用:
git commit --amend
进行追加提交,便可完成本地补充提交代码。
当代码提交到本地后,就能够将代码提交到主干,命令以下:
git push origin HEAD:refs/for/master
按正常提交流流程commit代码后,若主线版本比本地版本新,直接提交代码到主线将会报冲突,此时能够尝试使用以下方法来解决:
1. git stash
git stash用于将当前工做区的修改暂存起来,就像堆栈同样,能够随时将某一次缓存的修改再从新应用到当前工做区
2. git pull
拉取线上最新代码.
3.git stash pop
恢复/合并线上代码和本身的代码
此时再将代码提交到主干将不会报冲突,但新代码和本身修改的代码有没有相互重叠的修改致使不可预测的后果,须要提交者本身检视代码来保证。
1.git log 查看最近代码提交日志,能够按上下箭头浏览,内容以下:
2.git checkout $(committed)
使用git checkout $(committed)能够将代码回退到指定的提交版本
若是代码回退后须要恢复到当前主线最新版本,可使用: git reset --hard origin/master
将代码恢复到当前主线最新版本。
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完后代码便可回退到以前提交的版本
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点的不一样而移动。