git 使用技巧总结
 
说明: 本地repo已经有啦,对应的远程repo 为tiger, 本地分支为master。 
 
问题一: 当拉取代码的remote repo仓库为tiger, 而现在要将修改push到remote repo的 develop分支该如何?
 
思路:拉取新的remote_develop_repo_url, 将原有的代码合并到当前分支, 然后再提交到 remote_develop_repo_url,。
  1. 首先将当前修改提交到本地当前master分支, git commit -m "this is comment"
  2. 然后使用git remote add remote_repo_name url ,来添加新的remote repo, git remote add new_repo url_from_igerrit
  3. 然后再用git fetch remote_repo_name 来拉取代码 和 git branch 及其配置到本地,git fetch new_repo
  4. 然后,git checkout -b xx local_url 切换到新分支,  git checkout -b develop new_repo/develop
  5. 然后再将master分支的修改合并到当前分支上, merge命令自动commit了合并后的代码到新的分支, git merge master
  6. 然后再用git log 查看下更新的是否生成了 change-id, 否则需要拷贝commit-msg 到当前.git/hook目录下, git log  (仅针对持续集成服务器需要根据change-id来分辨提交id的情况)
  7. 最后使用git push remote_repo_name  local_branch_name:/refs/for/remote_repo/branch_name 。 git push new_repo develop:refs/to/remote_develop_branch

问题二:

有时为了保存多个工作状态,会使用多次commit (4次),将状态提交到本地仓库,但是在完成编码后,本想git push 最后的状态给时,本地的每次提交都会在远程仓库也有一个对应的提交(也有4次),造成服务器上出现不必要的版本, 如何处理此问题?使得本地4次,远程1次?
思路: git似乎没有直接方法处理这个问题,不过可以考虑在本地建立多分支。 即: 
1. 为本地的四次提交建立一个分支名,以保证其状态得以记录。
2. 然后,git reset --soft commit-id 将远程Head指向到4次提交前的状态。
3. 本地再次提交,此时由于Head指向四次前,而working Directory是四次修改提交之后的,此时git commit 就可以完成一次完成四次的提交。
这样既保证了本地有个分支记录了四次历史,同时保证服务器上只更新了一次,且状态一致。
 
命令如下:
1. git checkout -b branch_name ;  先命名新分支,保证当前分支的四次提交以后即使不记得commit id任然可以查找到。
2. git reset --soft commit-id; 指定四次前的id,回退HEAD, 而index和working directory 都是最新的。此时可以进行commit。
3. git diff ; 查看下状态
4. git log; 确认git 提交历史
5. git commit -m "4 in one"
6. git push remote-name local_branch:/refs/for/remote_branch
 
以上错误。
应该是这样:首先git log 查看最后一次的commit id, 然后 数一下要退回的commit 次数,直接git reset --mixed HEAD~N , 让头部退回, 但是index 和 working dir 保持最新。再次直接commit 即可。
 
 
情形三: 提交时,出现代码冲突。如何解决?
方法一: 临键分支, 然后会退到上一次commit, 再pull 最新代码, 然后再与当前分支 merge, 然后再提交。
 
情形四: 如果提交代码到review服务器后,未能及时通过review,而此时远程仓库已经出现了很多提交,导致当前提交无法merge, 怎么办?
1. 使用git checkout -b newBranchName 复制当前分支,以保证自己之前的代码提交保持一个备份。
2. git checkout master切换回原来的分支,并git reset --hard xxxxx,退回到上一次提交。
3. 使用 git pull origin master 来拉取服务器上的最新代码。
4. 使用git cherry-pick xxxxx_commit_idXXXXX  合并自己的代码到最新的状态上, 手动解决本地merge冲突。
5. git push origin master:master 即可。
 
 
情形五: 软件有多个发行版, 其中一个发型版中更新了一个功能,想把这个功能提交到其它发行版的远程仓库中, 此时需要怎么办?
1. cherry-pick 功能可以选择一个commit-id 来合并,但是只能在同一个仓库的不同分支。
2. 如果通过添加 git remote add iauto repo_addr_url 的方式的话, 会与本地出现冲突。
3.  通过git remote add  可以将不同远程仓库的分支放到同一个本地仓库的不同分支, 此时只要解决了本地冲突就可以解决了。
git checkout -f 此-f选项可以强制删除本地冲突, 以远程为标准。
--此时再用 git cherry-pick 
Done.
 
 
 
 
git 的强大之处:时空倒流
git 的时空倒流法依赖以下三个命令:
1. git reset : --soft --mixed  --hard 三种策略
2. git branch :
3. git checkout :
 
git的强大之处在于
1. 可以随处建立分支,使得不同功能的开发不会依赖,这样 不同版本的代码可以完整地保留下来。
2. 可以随时将代码版本倒流到某个正确无误的时刻, 时光倒流。
3. 可以利用reset 将本地的冗余提交的版本去掉。 
4. 可以使用stash 暂存一系列的零时操作。 空间倒流。
5. 可以让用户在本地或者远程的不同分支上轻松切换,版本的管理非常灵活。(空间倒流)

git 使用经验与技巧总结 (不断更新中)的更多相关文章

  1. git使用技巧集合(持续更新中)

    git使用技巧集合(持续更新中) 在团队协作中,git.svn等工具是非常重要的,在此只记录一些git使用过程中遇到的问题以及解决方法,并且会持续更新. 1.git commit之后,还没push,如 ...

  2. tp5 使用技巧(持续更新中...)

    tp5 使用技巧(持续更新中...) 1.自动写入时间 create_time和update_time 使用save方法才行,insert方法不生效,不知为何 2.过滤字段 allowfield和st ...

  3. Redis基础知识之————使用技巧(持续更新中.....)

    一.key 设计技巧 把表名转换为key前缀 如, tag: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid 第3段放置主键值,如2,3,4...., a , b , ...

  4. sourceInsight使用技巧,持续更新中~~~

    作为测试人员,读各种平台的工程代码时,根本不想安装各种vs或者eclipse等,于是,就找了一款代码阅读工具. sourceInsight,下载地址为官网:http://www.sourceinsig ...

  5. GridControl使用技巧总结,更新中...

    1如何禁用GridControl中单击列弹出右键菜单 设置Run Design->OptionsMenu->EnableColumnMenu 设置为:false 2如何定位到第一条数据/记 ...

  6. [代码]--GridControl使用技巧总结,更新中...

    1如何禁用GridControl中单击列弹出右键菜单 设置Run Design->OptionsMenu->EnableColumnMenu 设置为:false 2如何定位到第一条数据/记 ...

  7. 【Oracle】PL/SQL Developer使用技巧(持续更新中)

    1.关键字自动大写 在sql命令窗口中输入SQL语句时,想要关键字自动大写,引人注目该怎么办呢? 一步设置就可以达成了.点击Tools->Preference->Editor,看到截图中这 ...

  8. 平时常用的Visual Studio操作技巧,持续更新中……

    移除未使用的命名空间--方法1:右键--"组织using"--"移除未使用的using"--方法2:Shift+F10--"O"-" ...

  9. 【MySQL】日常小技巧汇总,更新中……

    创建表时修改自增主键,添加 AUTO_INCREMENT=<Number> ,例如: CREATE TABLE `table_name` ( `id` int(11) unsigned N ...

随机推荐

  1. 解决Jquery向页面append新元素之后事件的绑定问题

    /*经过用户技能标签增加样式*/ $(".s-edited").live("hover",function(){ $(this).toggleClass(&qu ...

  2. seajs 笔记

    第一步:全局配置的配置对象configseajs.config = function(configData)如:var configData = {    base: 'path/lib/',     ...

  3. VMware虛擬化技術實作問答

    http://www.netadmin.com.tw/article_content.aspx?sn=1202130002&ns=1203280001&jump=3 Q4:啟用VMwa ...

  4. Struts2添加了<s:debug>后页面无效果的解决方案

    一.环境 Struts2版本 struts2.5 二.问题 在jsp页面中添加了<s:debug>后页面上无任何展示. 三.解决 在struts.xml中的struts节点下添加如下常量即 ...

  5. Windows平台查看端口占用的程序

    一.方法:管理员权限打开Cmd窗口:netstat -obna

  6. C#中将DLL文件打包到EXE文件

    1:在工程目录增加dll目录,然后将dll文件复制到此目录,例如: 2:增加引用,定位到工程的dll目录,选中要增加的dll文件 3:修改dll文件夹下面的dll文件属性 选中嵌入式资源,不复制. 4 ...

  7. SpringBoot使用Mybatis注解进行一对多和多对多查询(2)

    SpringBoot使用Mybatis注解进行一对多和多对多查询 GitHub的完整示例项目地址kingboy-springboot-data 一.模拟的业务查询 系统中的用户user都有唯一对应的地 ...

  8. mysql安装后服务启动不了

    1.1 前言 最近真的是倒霉到家,装个mysql都能把所有的问题给问候了一遍······不过这也是一个宝贵的经验,得好好总结下,毕竟也不知道以后会不会再次遇到.如果有网友也能像我这样倒霉,但是能够幸运 ...

  9. VB 求余求整

    可以直接用函数来实现: 1.用CInt()函数的范围在-32,768 至 32,767,对于小数部分四舍五入 . 2.用Int()函数和Fix()函数都会删除参数的小数部份而返回剩下的整数, 不同之处 ...

  10. 双足步行机器人的ZMP与CoP检测

    静态步行与动态步行 机器人步态分为静态步行和动态步行.当机器人做静态步行运动时,身体的各个部分运动速度很小,机器人的整体稳定性较易控制.静态步行稳定性采用机器人的重心地面投影点(Center of G ...