Git&Repo 命令大全 ***
首先理解几个基本概念:
origin:默认远程版本库;
master:默认开发分支;
查看本地更新状态:
git status
jiangzhaowei@ubuntu$ git status
# On branch dev
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: .config
# modified: tv-ap/atsc/app/Kimin.c
# modified: tv-ap/atsc/app/MApp_Scan_ATSC.c
#
no changes added to commit (use "git add" and/or "git commit -a")
查看更改情况:
git diff ./tv-ap/atsc/app/MApp_Scan_ATSC.c
iangzhaowei@ubuntu$ git diff ./tv-ap/atsc/app/MApp_Scan_ATSC.c diff --git a/tv-ap/atsc/app/MApp_Scan_ATSC.c b/tv-ap/atsc/app/MApp_Scan_ATSC.c
index c750c1d..71811dc
--- a/tv-ap/atsc/app/MApp_Scan_ATSC.c
+++ b/tv-ap/atsc/app/MApp_Scan_ATSC.c
@@ -, +, @@ void MApp_Scan_ATSC_End(void)
pastRfCh.stTPSetting.u16Frequency = stTPSetting.u16Frequency;
pastRfCh.stTPSetting.fModulation = DEMOD_ATSC_MODE_NTSC;
pastVirtualCh[].u8RfNum = u8RFCh;
+ pastVirtualCh[].u16ProgramNumber = ;
pastVirtualCh[].stVirtualChNum.u8AirCable = (U8)ANT_TYPE;
#else
pastVirtualCh[].stTPSetting.u16Frequency = stTPSetting.u16Frequency;
REPO全部更新:
repo forall -c git pull
初始化本地git仓库(创建新仓库)
git init |
配置用户名
git config --global user.name "xxx" |
配置邮件
git config --global user.email "xxx@xxx.com" |
git status等命令自动着色
git config --global color.ui true git config --global color.status auto git config --global color.diff auto git config --global color.branch auto git config --global color.interactive auto |
clone远程仓库
git clone git+ssh: //git@192.168.53.168/VT.git |
查看当前版本状态(是否修改)
git status |
添加xyz文件至index
git add xyz |
增加当前子目录下所有更改过的文件至index
git add . |
提交
git commit -m 'xxx' |
合并上一次提交(用于反复修改)
git commit --amend -m 'xxx' |
将add和commit合为一步
git commit -am 'xxx' |
删除index中的文件
git rm xxx |
递归删除
git rm -r * |
显示提交日志
git log |
显示1行日志 -n为n行
git log -1 git log -5 |
显示提交日志及相关变动文件
git log --stat git log -p -m |
显示某个提交的详细内容
git show dfb02e6e4f2f7b573337763e5c0013802e392818 |
可只用commitid的前几位
git show dfb02 |
显示HEAD提交日志
git show HEAD |
显示HEAD的父(上一个版本)的提交日志 ^^为上两个版本 ^5为上5个版本
git show HEAD^ |
显示已存在的tag
git tag |
增加v2.0的tag
git tag -a v2.0 -m 'xxx' |
显示v2.0的日志及详细内容
git show v2.0 |
显示v2.0的日志
git log v2.0 |
显示所有未添加至index的变更
git diff |
显示所有已添加index但还未commit的变更
git diff --cached |
比较与上一个版本的差异
git diff HEAD^ |
比较与HEAD版本lib目录的差异
git diff HEAD -- ./lib |
比较远程分支master上有本地分支master上没有的
git diff origin/master..master |
只显示差异的文件,不显示具体内容
git diff origin/master..master --stat |
增加远程定义(用于push/pull/fetch)
git remote add origin git+ssh: //git@192.168.53.168/VT.git |
显示本地分支
git branch |
显示包含提交50089的分支
git branch --contains 50089 |
显示所有分支
git branch -a |
显示所有原创分支
git branch -r |
显示所有已合并到当前分支的分支
git branch --merged |
显示所有未合并到当前分支的分支
git branch --no-merged |
本地分支改名
git branch -m master master_copy |
从当前分支创建新分支master_copy并检出
git checkout -b master_copy |
上面的完整版
git checkout -b master master_copy |
检出已存在的features/performance分支
git checkout features/performance |
检出远程分支hotfixes/BJVEP933并创建本地跟踪分支
git checkout --track hotfixes/BJVEP933 |
检出版本v2.0
git checkout v2.0 |
从远程分支develop创建新本地分支devel并检出
git checkout -b devel origin/develop |
检出head版本的README文件(可用于修改错误回退)
git checkout -- README |
合并远程master分支至当前分支
git merge origin/master |
合并提交ff44785404a8e的修改
git cherry-pick ff44785404a8e |
将当前分支push到远程master分支
git push origin master |
删除远程仓库的hotfixes/BJVEP933分支
git push origin :hotfixes/BJVEP933 |
把所有tag推送到远程仓库
git push --tags |
获取所有远程分支(不更新本地分支,另需merge)
git fetch |
获取所有原创分支并清除服务器上已删掉的分支
git fetch --prune |
获取远程分支master并merge到当前分支
git pull origin master |
重命名文件README为README2
git mv README README2 |
将当前版本重置为HEAD(通常用于merge失败回退)
git reset --hard HEAD git rebase |
删除分支hotfixes/BJVEP933(本分支修改已合并到其他分支)
git branch -d hotfixes/BJVEP933 |
强制删除分支hotfixes/BJVEP933
git branch -D hotfixes/BJVEP933 |
列出git index包含的文件
git ls-files |
图示当前分支历史
git show-branch |
图示所有分支历史
git show-branch --all |
显示提交历史对应的文件修改
git whatchanged |
撤销提交dfb02e6e4f2f7b573337763e5c0013802e392818
git revert dfb02e6e4f2f7b573337763e5c0013802e392818 |
内部命令:显示某个git对象
git ls-tree HEAD |
内部命令:显示某个ref对于的SHA1 HASH
git rev-parse v2.0 |
显示所有提交,包括孤立节点
git reflog git show HEAD@{5} |
显示master分支昨天的状态
git show master@{yesterday} |
图示提交日志
git log --pretty=format: '%h %s' --graph git show HEAD~3 git show -s --pretty=raw 2be7fcb476 |
暂存当前修改,将所有至为HEAD状态
git stash |
查看所有暂存
git stash list |
参考第一次暂存
git stash show -p stash@{0} |
应用第一次暂存
git stash apply stash@{0} |
文件中搜索文本“delete from”
git grep "delete from" git grep -e '#define' --and -e SORT_DIRENT git gc git fsck |
git checkout -- 文件名
把该文件在工作区的修改全部撤销,这里有两种情况:
一种是文件修改后还没有放到暂存区(也就是还没有执行git add),现在撤销修改就回到和版本库一样的状态;
一种是文件修改后已经添加到暂存区(已经执行了git add),又做了修改,撤销修改就回到了添加到暂存区后的状态;
总之,就是让这个文件回到最近执行git commit或git add时的状态。
注意中间的"--"很重要,没有“--”,就变成了“切换到另一个分支”的命令。
git reset HEAD 文件名
把暂存区的修改撤销掉(unstage),重新放回工作区。
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,当我们用HEAD时,表示最新的版本。
。
git rm 文件名
在工作区中增加一个文件,并添加到本地分支中。但是如果你不需要这个文件了。你直接用"rm 文件名"删除该文件。这个时候,Git知道你删除了文件,因此,工作区和版本库就不一样了。git status可以查看当前的情况。
此时有两个选择:
1.确实要从版本库中删除该文件,就用命令"git rm 文件名"删掉,并且git commit提交,此时该文件就真正从版本库中删除了。
2.另一种情况是删错了,因为版本库中还有该文件,所以可以把误删的文件恢复到最新版本,“git checkout -- 文件名”。“git checkout”就是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
git remote add origin ***github仓库地址
关联一个远程仓库。在第一次提交之前进行。
git remote -v
查看远程仓库的地址。
git remote rm origin
删除原来的远程仓库地址。
git push -u origin master
第一次推送master分支的所有内容。
git push origin master
以后每次的修改使用该命令。
关于分支:
在版本回滚里,每次提交,Git都把他们串成一条时间线,这条时间线就是一个分支。到目前为止,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD指针严格来说不是指向提交,而是指向master,master才是指向提交的。所以,HEAD指向的就是当前分支。
git checkout -b dev
创建一个dev分支,然后切换到dev分支。
.
(22)分支管理策略
1.通常合并分支时,如果可以,Git会使用Fast Forward快进模式,但这种模式下,删除分支后,会丢掉分支信息。我们可以使用--no-ff方式的git merge.
2.git checkout -b dev
仍然创建并切换到dev分支。
3.git add .
git commit -m "merge --no-ff"
在dev分支下进行提交。
4.git checkout master
切换到master分支下。
5.git merge --no-ff -m "merge with no-ff" dev
合并使用--no-ff参数,表示禁用Fast Forward。因为本次合并要创建一个新的commit,所以加上-m参数。
6.git log --graph --pretty=oneline --abbrev-commit
查看分支历史。注意使用--abbrev-commit 参数可以把commit的40为hash值缩短为7位,方便查看。
7.分支策略:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活。干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master上发布1.0版本。每个人都有自己的分支,时不时往dev分支上合并就可以了。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出曾经做过合并。而fast forward合并就看不出曾经做过合并。默认是“fast forward”.
Bug分支
每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
1.git stash
把当前的工作现场储藏起来,等以后回复现场后继续使用。
git stash list
查看当前分支中存储的stash
。
2.git status
此时在dev分支中查看工作区,是干净的。因此可以放心的创建分支来修复bug。
。
3.git checkout master
git checkout -b issue-101
首先确定要在哪个分支上修复bug,假定要在master分支上修复,就从master创建临时分支。
。
4.在issue-101上修复bug,提交。
。
5.git checkout master
git merge --no-ff -m "修复完成,合并issue-101分支" issue-101
git log --graph --pretty=oneline --abbrev-commit
合并bug分支。
。
6.git branch -d issue-101
删除bug分支。
。
7.git checkout dev
git status
再次回到dev分支干活,工作现场是完全干净的。
。
8.git stash list
查看当前的工作现场。Git把stash内容存储在某个地方了。我们需要恢复现场。
.
9.git stash pop
git stash list
在恢复内容的同时把stash的内容也删了。
.
10.git stash apply
git stash drop
这两行命令相当于“git stash pop”. 用“git stash apply”恢复,但是恢复后,stash内容并不删除,需要用“git stash drop”来删除。
。
11.git add .
git commit -m "在dev分支提交"
把dev分支工作的内容提交。等下要合并到master分支。
。
12.git checkout master
git merge --no-ff -m "合并dev分支的工作内容" dev
如果有冲突,则手动修改。
。
13.git add .
git commit -m “合并了dev后的master提交”
git branch -d dev
手动解决冲突后,在master提交,然后删除dev分支。
。
14.小结:修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除。
当手头工作没有完成时,先把工作现场git stash 一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
(24)Feature分支
1.添加一个新功能,你肯定不希望因为一些实验性质的代码,把主分支搞乱了。所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后删除feature分支。
当开发完成后,如果在还没有合并之前,这个新功能不需要了。就需要删除该分支。
git branch -d feature-net
.
2.git branch -D feature-net
注意:1中的删除无法成功,因为该分支还没有被合并,如果删除,将丢失修改。如果要进行强行删除,要使用"git branch -D feature-net"命令。
。
3.小结:开发一个新的feature,最好新建一个分支。如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
(25)git remote
查看远程库的信息。
git remote -v
显示详细信息。显示了可以抓取和推送的origin地址。如果没有推送的权限,就看不到push的地址。
。
(26)多人协作
1.推送分支:就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上。
git push origin master
如果要推送到其他分支,比如dev,就改成:
git push origin dev
但是并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些分支不需要呢?
--master分支是主分支,因此要时刻与远程同步;
--dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
--bug分支只用于在本地修复bug,没必要推送到远程;
--feature分支可以看实际开发需要。
2.抓取分支
git checkout -b dev origin/dev
创建远程origin的dev分支到本地。
git branch --set-upstream dev origin/dev
设置本地dev与远程origin/dev分支的链接。
3.多人协作的模式:
--首先,可以试图用git push origin branch-name推送自己的修改;
--如果推送失败,因为远程分支比你的本地分支版本新,需要先用git pull视图合并;
--如果合并有冲突,则解决冲突,并在本地提交;
--没有冲突或者解决冲突后,再用git push origin branch-name推送就能成功。
--如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令"git branch --set-upstream branch-name origin/branch-name".
4.小结
--查看远程库信息,使用“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.如果有冲突,要先处理冲突。
(27)标签管理
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Gitde 标签虽然是版本库的快照,但其实他就是指向某个commit的指针。所以,创建和删除标签都是瞬间完成的。
(28)创建标签
git tag v1.0
切换到要打标签的分支上,执行“git tag v1.0”,默认是打在最新提交的commit上。
git tag
查看所有的标签。
.
git tag v1.1 commit_id
标签可以打在任意一个提交上。
git show v1.0
查看标签信息。
.
(29)操作标签
1.git tag -d v1.0
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
。
2.git push origin v1.0
推送某个tag到远程分支。
。
3.git push origin --tags
一次性推送全部尚未推送到远程的本地标签。
。
4.如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除
git tag -d v1.0
然后从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/v1.0
.
5.小结:
--命令“git push origin <tagname>”:可以推送一个本地标签;
--命令“git push origin --tags”:可以推送全部未推送的本地标签;
--命令"git tag -d <tagname>":可以删除一个本地标签;
--命令“git push origin :refs/tags/<tagname>”:可以删除一个远程标签。
Git&Repo 命令大全 ***的更多相关文章
- 【git】Git 常用命令大全
Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势.
- 10年阿里自动化测试架构师帮您收集的:git常用命令大全以及git原理图【泣血推荐,建议收藏】
一.Git分布式版本控制简介 Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势.本来想着只把最有用.最常用的 Git 命令记下来, ...
- Git 常用命令大全
Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加 ...
- 转 Git 常用命令大全
一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch ...
- Mac下配置git环境和客户端SourceTree+Git常用命令大全(Mac 10.12)
前言: 如果不想折腾,直接下载GitHub桌面端,高度集成git,不需要学习git的任何命令. https://desktop.github.com/ 一.配置git环境 1.上官网https://g ...
- Git 常用命令大全(转)
Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone g ...
- 最常用 最完整 最清晰 的git使用命令大全!
Git 常用命令 初始化项目步骤 mkdir WebApp //创建文件夹 cd WebApp //进入到该文件夹 git init //初始化 touch README //生成README git ...
- Git 常用命令大全-转载
一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...
- Git常用命令大全
查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id gi ...
随机推荐
- C++线程池总结
本文采用pthread实现线程池,有以下几个类. CTask:任务抽象类,主要提供接口,供子类实现. CMyTask:继承CTask实现接口 CThreadPool:线程池类,用于管理线程. 信号量: ...
- C#与C++之间类型对应关系
//C++中的DLL函数原型为 //extern "C" __declspec(dllexport) bool 方法名一(const char* 变量名1, unsigned c ...
- scala学习手记32 - trait选择性混入
继续上一节. 狗当然是人类的好朋友.但是藏獒呢?这玩意儿又蠢又笨又凶狠,肯定不能算很多人的好朋友了.其实,刚才那句话还可以修正一下下:我们接受的狗才是我们的好朋友. 用程序怎么实现呢?在java里面, ...
- 阻止a标签跳转四种方法 兼容各大浏览器(包括IE)
阻止a标签跳转四种方法 兼容各大浏览器(包括IE) HTML <!--第一种--> <a href="javascript:;">我不会被跳转</a& ...
- FM算法 的总结
FM的总结: 1.FM算法与线性回归相比增加了特征的交叉.自动选择了所有特征的两两组合,并且给出了两两组合的权重. 2.上一条所说的,如果给两两特征的组合都给一个权重的话,需要训练的参数太多了.比如我 ...
- java8 日期处理
这两周写业务逻辑,总会有各种日期操作,但是又记不住API,就是记不住API啊 这篇博客不错,记下来 https://lw900925.github.io/java/java8-newtime-api. ...
- mysql中的左连接右连接内连接
一. 初始化SQL语句 /*join 建表语句*/ drop database if exists test; create database test; use test; /* 左表t1*/ dr ...
- c语言中的string
1. strlen(char const* s); 函数传入的是c风格字符串(即以‘\0’结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'. 2. str ...
- Win7系统搭建WiFi热点详细攻略
(转自:http://blog.csdn.net/gisredevelopment/article/details/16113889) 一.如果你之前没有在笔记本上搭建过WiFi,那么恭喜你,你的笔记 ...
- New Concept English three (39)
26w/m 70errors The rough across the plain soon became so bad that we tried to get Bruce to drive bac ...