工作开发中常用的Git、Gerrit和vim相关命令

一、添加到仓库
1.git add:添加文件,含义就是告诉git,将文件添加到git仓库中去,例如:git add test.txt
2.git commit -m:提交文件,含义就是将文件提交到git仓库。-m后面指的是本次提交的说明。
添加文件到Git仓库,分两步:
a.使用命令git add ,注意,可反复多次使用,添加多个文件;
b.使用命令git commit -m ,完成。
二、查看文件、版本回退
3.git status:查看变动后的文件是哪些,含义:可以让我们掌握仓库的当前状态
4.git diff:查看某个文件具体的修改的某个内容
c.要随时掌握工作区的状态,使用git status命令。
d.如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
5.git log:查看提交的日志
6.git log --pretty=oneline :简化提交日志,只会显示commitId加上说明
(q是从git log退出)
回退版本:
a:在Git中,用HEAD表示当前版本,也就是最新的提交
b:上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100
c:git reset --hard HEAD^:回到上一个版本
(cat 查看文件内容,例如:cat 文件)
*现在已经回退到上一个版本了,现在又想回到上一个版本:
只要命令行界面没有关掉,查找到最新的那个版本的commitId
git reset --hard commitId (说明:commitId可以不用写全,git会自动去找)
*你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
git reflog :显示从最新的到后面的
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令
git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
三、分为暂存区和工作区
(注意:git add 是将文件添加到暂存区,git commit 将暂存区提交到当前分支)
我们现在在本地开发的叫做工作区。

使用git commit后就会将暂存区的提交到分支了,就变成这样了

四、管理修改
mv 文件名 修改后的文件名
vi 文件名:含义是修改文件名
git diff --HEAD commitid 查看本地和分支上的不同
git reset <文件>:回退这个文件的版本
五、撤销修改
已经修改完了的文件,但是没有add 和 commit
已经修改完了的文件,但是已经add或者commit了
git checkout – <文件>:–很重要,没有这个的话就是切换到另一个分支了。
总之是让这个文件回到最近一次的git commit 和 git add时的状态
git reset HEAD:用HEAD表示最新版本,(git reset 这个也可以)
git checkout –
(ps:前提是没有push到远程)

六、删除文件
如果文件已经上传,add 和commit了。
删错了某个文件,但是仓库中还有
两种办法:1.rm 文件-》git add 文件-》git commit 文件。覆盖掉
2.rm文件-》git rm 文件 -》git commit
git checkout – 就可以恢复过来了

七、远程仓库
git push:提交远程仓库
git clone 地址:克隆仓库
八、创建并合并分支
git checkout -b 分支名:创建分支,-b表示创建并切换 等价于-》git branch 分支名,git checkout 分支
git branch :会列出所有分支。当前分支用*表示
例如:在新分支改了后。要将新分支改了的内容推到主干上去
a.将新的分支上改变的commit完
b.切换到主分支
c.git merge 分支:git merge用于合并指定分支到当前分支
git branch -d 分支:删除分支
小结:
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
九、解决冲突
git merge 分支名 b.手动编辑有冲突的文件。然后在提交
git log --graph查看分支合并图
十、分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
例如:git merge --no-ff -m"注释" 分支:–no-ff表示禁用fast forward
总的来说就是在合并分支的时候,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支。能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
十一、bug分支
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
开发一个新feature,最好新建一个分支;如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
git remote:查看远程信息,加上-v显示更详细的信息
git push:推送要提价的代码到远程分支
git pull:拉取远程新的分支到本地
注意:如果git pull出错。出现If you wish to set tracking information for this branch you can do so with:
说明,你的本地分支与远程分支没有链接上。
使用;git branch --set-upstream-to origin/
例如:git branch --set-upstream-to=origin/dev dev

小结:
因此,多人协作的工作模式通常是这样:
首先,可以试图用git push origin 推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令
git branch --set-upstream-to origin/。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
小结
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

十二、Rebase
多人在同一个分支上协作时,很容易出现冲突。即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功。

rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
十三创建标签
命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
命令git push origin 可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d 可以删除一个本地标签;
命令git push origin :refs/tags/可以删除一个远程标
命令git tag -a -m "blablabla…"可以指定标签信息;
命令git tag可以查看所有标签。
操作git tag
命令git push origin 可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d 可以删除一个本地标签;
命令git push origin :refs/tags/可以删除一个远程标签。

gerrit

使用过git的同学,都知道,当我们git add --> git commit --> git push 之后,你的代码会被直接提交到repo,也就是代码仓库中,就是图中橘红色箭头指示的那样。
那么gerrit就是上图中的那只鸟,普通成员的代码是被先push到gerrit服务器上,然后由代码审核人员,就是左上角的integrator在web页面进行代码的审核(review),可以单人审核,也可以邀请其他成员一同审核,当代码审核通过(approve)之后,这次代码才会被提交(submit)到代码仓库(repo)中去。
无论有新的代码提交待审核,代码审核通过或被拒绝,代码提交者(Contributor)和所有的相关代码审核人员(Integrator)都会收到邮件提醒。
gerrit还有自动测试的功能,和主线有冲突或者测试不通过的代码,是会被直接拒绝掉的,这个功能似乎就是右下角那个老头(Jenkins)的任务。
整个流程就是这样。 在使用过程中,有两点需要特别注意下:
当进行commit时,必须要生成一个Change-Id,否则,push到gerrit服务器时,会收到一个错误提醒。
提交者不能直接把代码推到远程的master主线(或者其他远程分支)上去。这样就相当于越过了gerrit了。 gerrit必须依赖于一个refs/for/*的分支。
假如我们远程只有一个master主线,那么只有当你的代码被提交到refs/for/master分支时,gerrit才会知道,我收到了一个需要审核的代码推送,需要通知审核员来审核代码了。
当审核通过之后,gerrit会自动将这条分支合并到master主线上,然后邮件通知相关成员,master分支有更新,需要的成员再去pull就好了。而且这条refs/for/master分支,是透明的,也就是说普通成员其实是不需要知道这条线的,如果你正确配置了sourceTree,你也应该是看不到这条线的。

vim基本常用命令大全

基本上vi/vim共分为3种模式,命令模式、输入模式和底线模式
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不 会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式
q 退出程序
w 保存文件

底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序
w 保存文件
按ESC键可随时退出底线命令模式。
简单的说,我们可以将这三个模式想成底下的图标来表示:

  大连哪家男科医院好 http://www.0411nk.cn/

  大连包皮手术费用 http://www.bohai120.com/

猜你喜欢

转载自blog.csdn.net/qq_42894764/article/details/89788900
今日推荐