上库git常用命令总结  

摘要:介绍一下高效率上库的方法,省去合代码的流程。 推荐在linux服务器上完成代码的clone,切分支,编写,编译,提交,push的全部流程。 1、clone:git clone git@rnd-isourceb.huawei.com:TACS/td_utfp.git test (test为文件夹名) 2、设置库: git remote -v 查看当前库 添加远程本地库:git remote add origin git@rnd-isourceb.huawei.com:w00424187/utfp.git 添加远程主干库:git remote add upstream git@rnd-isourceb.huawei.com:TACS/td_u

介绍一下高效率上库的方法,省去合代码的流程。

推荐在linux服务器上完成代码的clone,切分支,编写,编译,提交,push的全部流程。

在linux服务器上生成key:

ssh-keygen

然后将自己对应用户路径下的.ssh文件夹中id_rsa.pub文件内容复制,并在isource上配置ssh key。

参考文档:http://3ms.huawei.com/km/blogs/details/2330371

http://3ms.huawei.com/km/blogs/details/5230201

先将以下基础看完,最后再看上库最简单的三部曲

1、clone:git clone git@rnd-isourceb.huawei.com:TACS/td_utfp.git test

(test为文件夹名)

2、设置库:

git remote -v 查看当前库

添加远程本地库:git remote add origin git@rnd-isourceb.huawei.com:w00424187/utfp.git

添加远程主干库:git remote add upstream git@rnd-isourceb.huawei.com:TACS/td_utfp.git

origin 和 upstream看个人习惯相反设置

如果地址或者名称取错了,不能修改,只能先移除再重新添加

git remote remove origin

3、更新库上库到本地

git fetch upstream

git fetch origin

或者 git remote update

ps:用小乌龟Pull操作等于:git fetch upstream + git merge

ps:为了避免冲突,所以最好采用先fetch,再切分支方式,不要直接pull拉取

4、基于库上最新代码develop分支切分支

ps:此处强烈建议每次fetch库上最新的代码,然后基于最新的远端分支创建一个分支来进行特性开发

git checkout -b test upstream/develop

(test为本地分支取名)

本地切分支:git checkout test1

查看当前分支:git branch

删除分支:git branch -D test1

5、在当前分支修改代码

查看当前文件变更情况:git status

放弃变更文件所有更改:git checkout .

(将.换成某个文件的全路径,表示放弃该文件的修改)

ps:git checkout 只会放弃没有add commit的文件的修改(也就是git status中红色部分的文件)

删除未追踪(untracked)文件:

git clean -f 删除文件

git clean -n 显示要删除的文件和目录

git clean -df 删除文件和目录

批量删除分支:

git branch |grep 'branchName' |xargs git branch -D

将更改添加到缓存:git add .

(将.换成某个文件的全路径,表示添加某一指定文件)

6、add后提交

提交:git commit

此时进入提交界面

输入  i  : 进入插入模式,将commit信息补全后

输入 esc  : 退出插入模式

输入   shift +  ;   :再输入 wq 保存并退出

7、提交后查看提交情况:git log 可以查到所有的commit id

8、若提交后又有些更改,更改后继续add

提交时输入 git commit --amend

表示将当前更改合入上一次commit,此时虽两次提交,但只会有一个commit号

也可以理解成修改上一次commit,可以修改commit信息

9、若提交后发现多提交了一个文件

git log:查找所有commit号,找到上次你提交的commit的号的上一个commit号(通常为别人提交的)

git reset commit_id(上一步找到的commit号)

表示回到那个commit点,你修改的代码不会丢,会回到add前的状态

此时用git checkout 或者rm将不想要的删了 ,或者在add时不要全部添加,重新添加想要提交的文件

然后重新git commit提交(注意不是git commit --amend,因为你的提交已经被reset了)

10、上传到远端库

git push origin test:test --force

(git push origin(远端本地库) test(本地分支名):test(远端分支名,没有会自动创建) --force)

现在就可以提pr了

11、如果想向publish和develop各提一个pr,这样避免合代码:

步骤1,按以上操作先向develop提一个pr

步骤2,基于远端库的publish切一个本地分支:

git checkout -b test_pub upstream/br_utsv1r5_publish

步骤3,找到修改的向远端库develop推的commit号(两种方式,一种是pr了、链接有,直接复制,一种是切到提develop的分支,然后git log)

git cherry-pick commit_id

这句话就完成了合入代码并以相同commit信息提交的流程

步骤4,push到远端库上重新提pr即可

 ps:cherry-pick 相当于把之前的commit id提交到最新的那个分支上面了,还可以继续用amend ——强大

12、解决冲突

git cherry-pick commit_id

这句有时候会失败,原因是遇到了冲突

步骤1,输入:git mergetool

步骤2,输入:shift + ;

此时进入了查看冲突文件的修改的界面,但是这个界面很花不好看,我通常不习惯在这里解决冲突

步骤3 ,输入:wqa

不做任何更改就退出

步骤4,此时会提示是否已解决冲突,选择已解决

ps:其实并未真的解决,文件里还有些head <<<<之类的冲突符号,用本地打开冲突文件,然后将你想保留的真实更改在本地重新编辑保存即可

步骤5,git cherry-pick --continue

不输这句继续是无法做别的操作的

冲突成功解决

小窍门

1、只要将每次提交push到远端本地库上,commit号就一定会保留,换一个库也能将更改cherry-pick过来

2、每次开发新特性不必重新clone代码,先fetch再切分支,就是库上最新代码了

3、不要用pull,pull意味着把库上所有的commit(包括别人的)全部cherry-pick过来,

每次只需要切一个最新分支代码,将你的commit部分cherry-pick过来就可以了,免得冲突太多太难解决。

这种方式可以始终基于最新的分支验自己的本地代码。

4、git show commit_id  可以看到这个commit所更改的所有内容

5、服务器上推代码真的非常快,一是不用合代码,用git status可以看到所有变更,一目了然,二是push的速度真的很快

上库三部曲:

1.git status查看变更

git add 添加需要的更改

2.git commit (不是第一次提交就git commit --amend)

3.git push

ps:git commit --amend 太好用了,特别是对一个分支的反复修改,可以使用同一个commit id。

有写的不对的地方,或者更好的提高效率的办法,请大家指正,多交流,谢谢

关于Binary file forbidden解决方案:

如果是合入个人仓(如上图的z00383539仓),可以取消或修改个人仓的二进制门禁,修改方法如下:

点击左上角的按钮 --> Git Hooks/Web Hooks ,配置 Binary file gate页信息,在Allowed files中新增待提交的二进制文件类型,并在Privileged users中新增自己的工号信息。或者直接把Enable binary file gate前的勾去掉关掉二进制门禁。(找不到这个选项,是因为没点击edit按钮)

git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释

https://www.cnblogs.com/tocy/p/git-stash-reference.html

git stash list
显示保存进度的列表。也就意味着,git stash命令可以多次执行。

git stash save 'build files'
#恢复但不删除stash拷贝
git stash apply
git stash pop
#删除stash分支
git stash drop stash@{0}
git stash clear

内部git常用总结的更多相关文章

  1. git常用命令2

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  2. 转 Git 常用命令大全

    一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态  git commit 提交  git branch -a 查看所有的分支 git branch ...

  3. git常用命令3

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态git commit 提交git branch -a 查看所有的分支git branch -r 查看 ...

  4. Git 常用命令速查表(图文+表格)【转】

    转自:http://www.jb51.net/article/55442.htm 一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git comm ...

  5. Git常用操作指南

    目录 前言 Git简介 安装之后第一步 创建版本库 本地仓库 远程仓库 版本控制 工作区和暂存区 版本回退 撤销修改 删除文件 分支管理 创建与合并分支 解决冲突 分支管理策略 状态存储 多人协作 R ...

  6. Git常用命令及方法

    https://blog.csdn.net/web_csdn_share/article/details/79243308 Git常用命令及方法大全 下面是我整理的常用 Git 命令清单.几个专用名词 ...

  7. Ubuntu常用命令及git常用命令

    1. CMakeLists.txt中指定OpenCV路径 set(OPENCV_DIR /***/***/opencv-2.4.9) 2. cmake工程编译安装 mkdir build cd bui ...

  8. Git 常用命令大全-转载

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  9. 10年阿里自动化测试架构师帮您收集的:git常用命令大全以及git原理图【泣血推荐,建议收藏】

    一.Git分布式版本控制简介 ​ Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势.本来想着只把最有用.最常用的 Git 命令记下来, ...

随机推荐

  1. Python深入类和对象

    一. 鸭子类型和多态 1.什么是鸭子类型: 在程序设计中,鸭子类型(英语:Duck typing)是动态类型和某些静态语言的一种对象推断风格."鸭子类型"像多态一样工作,但是没有继 ...

  2. 二进制安装MongoDB

    1.下载mongodb cd /usr/local/src/ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.5.tgz ...

  3. jenkins插件findbugs+pmd+checkstyle结合sonar与maven(java环境代码质量和代码规范管理)

    一.下载jdk并安装(最好jdk官网下载解压安装的) 二.下载maven并安装maven 三.安装jenkins及插件 安装checkstyle.pmd.findbugs.maven.sonar等相关 ...

  4. webpack配置之代码优化

    前面的话 前面介绍了webpack的基本配置,本文将详细介绍webpack中关于代码优化的配置 打包公共代码 CommonsChunkPlugin 插件,是一个可选的用于建立一个独立文件(又称作 ch ...

  5. codeforces379C

    New Year Ratings Change CodeForces - 379C One very well-known internet resource site (let's call it ...

  6. Nginx 用分片提示缓存效率

    L:107 slice 模块 Syntax:slice size;Default: slice 0; Context:http, server, location 功能:通过range协议将大文件分解 ...

  7. 使用Java泛型返回动态类型

    返回一个指定类型的集合,并且clazz必须继承IGeoLog对象或者是其本身 <T extends IGeoLog> List<T> getLogListSql(Class&l ...

  8. JQ用法

    jQuery简称jq,是一款同prototype一样优秀js开发库类,特别是对css和XPath的支持,使我们写js变得更加方便!如果你不是个js高手又想写出优 秀的js效果,jq可以帮你达到目的!下 ...

  9. Java WEB 乱码解决大全

    来自 http://ligure.iteye.com/blog/ 中文乱码:在以后学习过程中全部采用UTF-8 1.文件的乱码 1.1.项目文本文件默认编码:        [右击项目]->[P ...

  10. BZOJ5418[Noi2018]屠龙勇士——exgcd+扩展CRT+set

    题目链接: [Noi2018]屠龙勇士 题目大意:有$n$条龙和初始$m$个武器,每个武器有一个攻击力$t_{i}$,每条龙有一个初始血量$a_{i}$和一个回复值$p_{i}$(即只要血量为负数就一 ...