git与repo的使用

转自:https://blog.csdn.net/o0Avalon0o/article/details/56684717

Git的使用

git init 初始化仓库
git add -A 将递归添加当前目录下的所有文件到临时工作区 -f 可以强制跳过 .gitignore的检测
git commit -m “Message” 提交临时工作区的内容
git tag -a xxx commit_number -m“xxx”为当前commit添加tag,-m后面接的注释;如果不添加名称,则显示当前仓库中的所有tag
git tag -l -n 详细显示所有的tag
git tag -d xxx删除tag
git push origin -tags上传所有的tag,或者接tag名,上传指定tag
git log –pretty=oneline 以单行的格式,显示当前工作区中的所有版本 --graph 查看分支流程图
git show 提交号 查看提交号的更改 --stat查看commit的文件简要改动
git reset –hard tag/commit_id 还原某个版本号
git reset xxx 撤销某个add到暂存区的文件
git clean -df 删除仓库中未跟踪的文件和目录,加上x选项可以忽略.gitignore规则
git commit --amend –no-edit 修改最后一次commit的内容,如果没有“–no-edit”则可以修改message
当需要将多个commit合并成为一个patch的时候,可以新建一个分支,将分支git reset --hard到指定src提交点,然后使用git merge –squash master;git commit -m "xxx"得到一个新的融合commit,最后使用git format-patch HEAD^即可
–squash选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不保留待合并分支上的历史信息,也不提交、不移动HEAD,因此需要一条额外的commit命令。其效果相当于将another分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来。判断是否使用–squash选项最根本的标准是,待合并分支上的历史是否有意义。

git reflog 当后悔git reset之后,可以在30天内,通过reflog找回被恢复的commit编号,再次执行git reset –hard tag/commit_id进行返回,从reflog中可以看出,与cherry-pick应用变更不同,reset 命令的作用就是通过commit编号,进行更改动作回溯。
git format-patch tag/commit_id 制作对特定版本号的补丁 (-1 commit号可以针对某个历史提交生成补丁)
git apply –stat newpatch.patch 先检查patch文件
git apply –check newpatch.patch 检查能否应用成功
git am –signoff < newpatch.patch 打补丁
git status 查看当前工作区状态和版本信息
git stash 将当前工作区暂存
git stash list 查看缓存工作区
git stash pop stash@{num} 恢复编号为num的缓存工作区
git stash drop stash@{num} 丢弃编号为num的缓存工作区
git stash show -p stash@{0} 查看当前工作内容与stash中的区别
git stash clear 清除所有缓存工作区
需要stash部分文件
git add xxx //添加不需要stash的文件
git stash --keep-index
git reset //继续工作

git cherry-pick 将一个提交的更改应用到本地,并且产生一个新的commit,当产生冲突的时候,可以git status 查看冲突文件路径,并且直接vim打开,查找HEAD标记手动解决冲突后,git add添加文件,并且git cherry-pick –continue完成提交
git diff 提交号(src) 提交点(dst) > xxx.patch生成标准补丁
git diff 可以查看当前工作区与HEAD的差别 加–cached 可以查看添加到暂存区的文件改动

git apply < –check> xxx.patch 检查或者打入补丁
git format-patch 提交号/-M 分知名 直接生成git标准补丁
git am xxx.patch 检查并且应用补丁

git branch xxx 创建分支,不输入名称可以查看当前branch
git branch -d xxx 删除分支
git fetch 更新当前分支的内容和所有引用;随后使用git branch -a可以看到远程端最新的分支
git checkout -b xxx(本地分支命名) xxx(git branch -a中看到的分支名) 下载远程分支到本地
git checkout xxx 分支切换
git merge xxx 将xxx(如develop)分支合并到当前分支(如master),默认参数–ff,相当于将xxx的提交直接搬到当前分支,不保留xxx分支(如develop)的信息
添加–squash则将分支的所有改动合成为一个提交
添加–no-ff则保留合并前xxx分支(如develop)的信息
git blame filename 查看文件每一行的提交历史

git revert commit_id 回滚某次提交,并且生成新的提交

git clone avalon@192.168.72.45:~/Program/git_test/ ./git_test 拷贝远程仓库到本地
git remote -v 显示所有远程仓库
git remote add xxx avalon@192.168.72.45:~/Program/git_test/ 添加远程仓库
git remote rm xxx 删除远程仓库
git remote show xxx 查询远程url分支
git remote prune xxx 清除远程url中已删除的分支

cat .git/config 查看upstream信息
git branch --unset-upstream xxx 取消xxx分支的upstream
git branch -u xxx/caf b01 设置本地分支b01的upstream为xxx的caf分支,新建的remote需要先通过git fetch获得远程分支

git fetch origin remote_branch:local_branch
将origin远程仓库的remote_branch分支内容更新到Origin/remote_branch下,不改变本地仓库内容
git pull origin remote_branch:local_branch
同步origin远程仓库的remote_branch分支内容更新到Origin/remote_branch下,并且将内容merge到local_branch,git pull命令相当于git fetch+git merge
如果不希望在
如果远程仓库
git push -u origin local_branch:remote_branch
创建xxx分支,推送并且自动设置当前工作区跟踪远程仓库的xxx分支
git push -f 使用reset后,本地版本分支落后于服务器版本,可以使用强制推送进行服务器版本回滚

git rebase -i “commit_id”^ 进入编辑页面后,将需要丢弃的commit前面的单词改为drop,ctrl+X退出保存即可
git rebase 丢弃pull或者merge自动生成的commit信息,解决分支交叉问题

git submodule add <url> <path> 添加子模块
git submodule deinit {MOD_NAME} + git rm --cached {MOD_NAME} 删除子模块
git submodule init + git submodule update 逐个拉取子模块
git submodule update --init --recursive 拉取仓库所有子模块
更改submodule的url路径
修改仓库下.gitmodules的路径后 git submodule sync
git clone git@xxx.git --recursive 克隆的时候直接拉取所有子模块
编辑.gitmodules,更改url后git submodule sync可以更新子模块的url
同时在子模块目录中使用git remote set-url orgin更改本地仓库的url

将特定文件恢复
git log file_name
git checkout xxx(hash_code) file_name

停止跟踪某个文件
git rm --cache [file_name]
vim .gitignore 添加忽略文件
git commit -m “mark”
git push

删除git库中的某个文件夹,包括所有提交历史
git filter-branch --force --index-filter ‘git rm --cached -r --ignore-unmatch framework/protocol/joylink/src/’ --prune-empty --tag-name-filter cat – --all
使用http方式访问时,可以使用以下命令记录账号密码
git config --global credential.helper store
当账号密码进行重置后,可以使用下面清除存储的密码
git config --global --unset credential.helper
Repo的使用

repo常用命令

repo init -u xxx 根据xxx指定的url初始化repo仓库,可以使用的参数选项:
–repo-url指定repo工具的远程git仓库地址
–repo-branch指定repo工具使用的分支版本
-m指定当前仓库使用的manifest文件
-b指定使用的manifest仓库的版本分支
对于已经完成初始化的repo仓库,可以直接使用repo init -m xxx.xml;repo sync任意切换或者还原仓库。
repo branch 查看仓库的分支
repo start –all xxx 对git checkout -b的封装,根据manifest.xml清单的提交信息创建分支,会还原已经commit的修改,未提交的修改会被保留
repo start 之后,通过以下命令可以让当前工作区还原:
repo forall -c ‘git reset --hard HEAD’
repo forall -c ‘git clean -df’
repo checkout xxx 对git checkout的封装,切换到已有分支
repo abandon xxx 对git branch -D的封装, 删除仓库分支
repo upload 上传仓库改动到审核服务器(基本没有用到)
repo manifest -r --suppress-upstream-revision -o xxx.xml 将当前repo的状态保存为xxx.xml,-r表示将当前git仓库的HEAD作为revision,–suppress-upstream-revision表示不保存upstream信息
repo sync 同步拉取整个仓库代码
repo status 查看仓库当前状态
repo push --ignore_review 忽略review服务器,直接推送到代码服务器,当有多个工程需要推送的时候进入编辑模式,将对应工程branch的#注释去掉确认推送
repo remote add server url 为所有工程添加路径为url的远程仓库server
repo remote rm server 删除远程仓库server
repo forall -cvp “xxx” 针对仓库下的各个项目执行xxx中的命令,其中v是显示详细错误信息,p为每次执行先输出工程名
比如:
“echo ${REPO_PROJECT}”可以输出各个工程的名称,也是服务器仓库下各个git目录相对仓库目录的路径;
“echo\ ${REPO_PATH}”可以输出工作目录中.repo/projects下各个*.git目录的路径;
”echo ${REPO_REMOTE}“可以输出各个工程的远程仓库名称;
“echo ${REPO_LREV}”可以输出各个工程最后一次提交的哈希值;
”echo ${REPO_RREV}“可以输出各个工程克隆时manifest指定的分支;
manifest.xml内容解析

manifest.xml作为repo仓库的核心配置文件,同种通过众多数据元素组成,网上有许多官方文档描述,下面抽取几个重要的属性进行说明:

    manifest
    这个是配置的顶层元素,即根标志。
    remote
    name:表示git仓库的远程服务器的名字,git pull、get fetch的时候会用到这个remote name,如果仓库存在多个remote属性的话,default属性中需要指定default remote;
    fetch :所有git url真正路径的前缀,在所有git 的project name加上这个前缀,就是git url的真正路径;
    review :指定Gerrit的服务器名,用于repo upload操作。如果没有指定,则repo upload没有效果,实际上在很多情况下都没有使用代码审核服务器,所以完全可以忽略。
    default
    设定所有projects的默认属性值,如果在project元素里没有指定一个属性,则使用default元素的属性值。
    remote :远程服务器的名字(上面remote属性中提到过,多个remote的时候需要指定default remote,就是这里设置了);
    revision :所有git的默认branch,后面project没有特殊指出revision的话,就用这个分支版本;
    sync_j : 在repo sync中默认并行的数目。
    project
    每个project元素描述一个完整的git工程信息:
    name :git 的名称,用于生成git url。URL格式是: f e t c h / { fetch}/ fetch/{REPO_PROJECT}.git 其中的 fetch就是上面提到的remote 中的fetch元素,name 就是此处的name;
    path :clone到本地的git的工作目录,如果没有配置的话,跟name一样;
    remote :定义remote name,如果没有定义的话就用default中定义的remote name;
    revision :指定需要获取的git提交点,一般是明确的commit 哈希值。如果像default一样指定branch名,则该工程需要直接跟踪指定remote仓库branch分支,如果仓库的对应remote丢失,则repo命令会报错,不推荐这样使用;
    upstream:指定工程跟踪的远程分支信息,一般使用分支名;
    groups :列出project所属的组,以空格或者逗号分隔多个组名。所有的project都自动属于"all"组。每一个project自动属于name:‘name’ 和path:'path’组。例如,它自动属于default, name:monkeys,和 path:barrel-of组。如果一个project属于notdefault组,则repo sync时不会下载。
————————————————
版权声明:本文为CSDN博主「太陽金貨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/o0Avalon0o/article/details/56684717

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值