下面记录了一些git常用的命令,记录一下,备忘。
git remote 查看远程版本库名称
git remote -v 查看远程版本库详细地址
git remote show origin
git remote remove name 删除名称为name远程版本库
git remote add origin url 其中origin为名称 后边为对应的地址
git remote rename 原名称 新名称
git branch -a 查看所有的分支
git branch -l 查看本地分支
git branch -r 查看远程分支
git branch --set -upstream=origin/master 指定当前本地分支的远程upstream分支
git config --global push.default simple 设置当前push的模式是simple
git branch 分支名称 git创建本地分支
git push origin 本地分支名称:远程版本库分支名称
例如:git push origin roland:roland 将本地roland分支的内容push到远程版本库的roland分支
从图中能够看出本地仓库roland-->远程版本库的roland ,如果远程仓库不存在roland分支,则会创建roland分支(在push.default为simple的状态下)。
同时需要注意,在roland分支下push到远程版本库中的分支的名称需要和本地版本库分支名称一致(也就是roland)
这是因为推送规则是由git config中的push.default属性决定的,在Git 2.0之前,该值为matching,2.0以后为simple.
push.default有以下几个可选值:
nothing、current、upstream、simple、matching 他们的主要用途解释如下:
nothing:push操作无效,除非显式指定远程分支。
current:push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支。
upstream:push当前分支到它的upstream分支上。
simple:simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程upstream分支同名,否则会拒绝 push操作。(注意必须同名)
simple只会推送本地当前分支。
matching:push所有本地和远程两端都存在的同名分支。
个人理解:upstream需要手动设置本地分支的upstream分支,或者在push之前的pull操作,已经确定了本地分支的upstream分支,因为pull的过程中本地分支相当于远程分支的downstream,因此是不是已经默认了当前本地分支的upstream分支就是pull下来的远程分支呢?
在这之后,想查看本地roland分支的upstream是谁,使用以下命令:
git branch -vv 显示如下图:
图中看到的是origin/master,也就是说roland本地分支的upstream是远程版本库origin中的master,这和我理解的upstream为啥不太一样呢。(以后解除自己的误解后会更新)
删除远程分支:
git push --delete origin roland 删除远程版本库origin中的roland分支,在Gitblit上查看分支状态。发现只有一个master分支了。
git merge 分支名称 将该分支和当前所在分支合并
git checkout -b 分支名称 //新建立分支并立即切换过来
git checkout -- file //撤销对文件的更改
正常的创建分支并切换可能会分两步进行:
(1)git branch 分支名称
(2)git checkout 新创建的分支名称
git fetch origin //从中抓取本地没有的数据
回退到历史版本:
通过git reflog查看所有的历史版本
git reflog
git reset --hard 对应的历史版本-->通过git reflog获取
git reset HEAD <file> //可以将暂存区的修改撤销掉,重新放回工作区。
//git reset命令不仅可以回退版本,还可以将暂存区的修改回退到工作区,当时用HEAD时,表示的是最新版本。
将修改推送到远程
**********************************************继续添加一些内容*******************************************
git本地的三个区域:
working directory:工作区、编辑代码的区域
Staging area:暂存区 相当于是工作区和历史仓库之间的一个缓冲,代表需要提交的一个状态
history repository:历史仓库
git add:将工作区的文件添加到暂存区
git commit:将暂存区的文件添加到历史仓库里
git status:查看工作区和暂存区之间的区别
git rm:删除暂存区中不需要的东西
git mv:移动或者重命名文件
git ignore:忽略一些不需要添加到暂存区或者历史仓库中的文件
git pull = git fetch + git merge
git merge的两种用途:
1.用于git pull中,来整合另一端代码仓库中的变化(git pull = git ftech + git merge)
2.用于从一个分支到另一个分支的合并。
git merge dev 比如我现在所在分支为master 新的分支dev是用于修改程序的分支 这个相当于是将dev分支合并到master分支。git merge之前一定要将所有文件先commit掉。
git merge --abort 合并过程中存在冲突,回退到合并之前的状态。
*************************************************记录一些新的理解****************************************
查看别人的博客看到了几个比较好的图,记录一下,以便更好地理解。引用地址为:https://segmentfault.com/a/1190000004992316
除此之外,还有一张更详细的图片,描述的更细致,也摘抄了下来。
看过图解之后,没弄明白git clone和git fetch的区别在哪儿,于是在git Bash中通过git --help命令查看,如下图:
fetch Download objects and refs from another repository //从另一个库下载对象和引用
clone Clone a repository into a new directory //克隆库进入新目录
翻译后大致理解了
Git使用规范提醒:
-
使用Git过程中,必须通过创建分支进行开发,坚决禁止在主干分支上直接开发。review的同事有责任检查其他同事是否遵循分支规范。
-
在Git中,默认是不会提交空目录的,如果想提交某个空目录到版本库中,需要在该目录下新建一个 .gitignore 的空白文件,就可以提交了
-
把外部文件纳入到自己的 Git 分支来的时候一定要记得是先比对,确认所有修改都是自己修改的,然后再纳入。不然,容易出现代码回溯
-
多人协作时,不要各自在自己的 Git 分支开发,然后发文件合并。正确的方法应该是开一个远程分支,然后一起在远程分支里协作。不然,容易出现代码回溯(即别人的代码被覆盖的情况)
-
每个人提交代码是一定要 git diff 看提交的东西是不是都是自己修改的。如果有不是自己修改的内容,很可能就是代码回溯
-
review 代码的时候如果看到有被删除掉的代码,一定要确实是否是写代码的同事自己删除的。如果不是,很可能就是代码回溯
非常感谢上边列出的博主的文章,还是要在实际使用过程中加深理解。
再有新的git命令会继续更新,并且后续分类总结,之前的疑惑在清楚之后会添加到上边,希望大家多批评指正,大家一起学习,共同进步。