当前位置: 首页 > news >正文

git常用操作教程

不敢说这是git常用操作最全的教程,这是本人再前人的基础上加上应用了三年多git总结的,应该是比较全的,后续我还会把git 常见的错误总结出来。

git支持很多种不同的工作流程,我们采用的是与SVN接近的模拟中央服务器流程。即,有一个公用的代码库放在服务器上,开发者从这个共享的服务器克隆后,在本地开发,然后提交到服务器,并且从服务器获取其他用户提交的内容。

注意git是分布式的代码控制系统,所以每个代码库都是平等的,这里只是在逻辑上划分了一个中央服务器而已,在物理结构上,中央代码库与本地代码库没有什么不同。
[编辑]创建帐号
git可以使用多种协议在代码库之间通信。我们目前采用ssh协议,需要用户在服务器上有一个ssh帐号才能访问代码库。用户需要在本机创建一个ssh密钥对,把公钥发给管理员,密钥保存在自己本机。这样,就可以使用密钥连接服务器。

开始工作之前,需要复制一套中央服务器的代码库:

$ git clone /server/repo/project

git的提交操作是在本地完成的,不需要网络连接。

$ git checkout branch
--- 编辑现有文件或者添加新文件 ...
$ git add newfile
$ git commit -a
--- 填写此次提交的备注

这个操作实际是执行了获取更新,并且与本地代码合并两个操作。因为有可能2人改了同一个地方,所以这里有可能会出现冲突的情况。出现冲突时,需要手工合并代码。

$ git pull
向中央服务器发送本地的修改
这个操作是把本地的所有新的commit历史都提交到服务器
$ git push
  1. 不要提交垃圾文件。包括临时文件,编译产生的二进制文件,个人设置文件,系统cache,与项目无关的文件等等。使用.gitignore文件来告诉git哪些文件应该忽略掉。

  2. 不要提交不能编译运行的代码到master分支。平时创建临时分支来工作,可以随时提交,当告一段落之后再合并到master分支。保证master分支的代码是可运行的,这样不会给团队中的其他人带来不必要的影响。

  3. 善用分支。可以每开始一个新功能时就创建一个新分支,改完后合并到master。每个新版本也要用一个新分支,这样如果需要改老版本的bug,那么可以很轻松地切换到老分支,改完后再切回新分支。

  4. 多提交,及时提交。每当改动达到可以用一句话描述的时候,就提交。

  5. 一定要写清楚提交注释,写明做了哪些修改,不要用笼统的一句话例如“改bug”,而是要写具体的说明例如,“按钮文字从转发改成分享”。
    每个准备提交上线的版本要打tag,命名成v1.0.0_rc1这种格式,第一次提交就是rc1,第二次提交就是rc2等等


$ git clone ssh://%%%%.git
$ git clone ssh://%%%%%%.git
$ git config --global user.name "hufeng"
$ git config --global user.email hufeng@hufengvip.cn
$ git init
$ git add .
$ git commit -a
$ git checkout -f

$ git reset --hard
git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
$ git branch test
$ git checkout test
$ git checkout master

把下面的脚本放到 ~/.profile 或者 ~/.bashrc 里,命令行的提示符即会显示出当前的git分支名称。例如:~/Projects/cmb (master) $

function parse_git_branch {
      ref=$(git symbolic-ref HEAD 2> /dev/null) || return
        echo "("${ref#refs/heads/}")"
}

PS1="\w \$(parse_git_branch)\$ "

git本身带了一个服务器命令,启动后,其他机器可以用git协议访问本机的代码库

$ git daemon --export-all --base-path=/home/pub/projects/ test.git

注意:

  • 如果返回“fatal: no matching remote head”,说明代码库里没有文件或者没有commit过。
  • 在.git目录下应该有git-daemon-export-ok这个文件,否则必须使用export-all参数来强制共享
  • 如果允许远程提交代码,需要加上 —enable=receive-pack 参数
在git rm -rf  --cached  CCB.xcodeproj/project.xcworkspace/xcuserdata/  

--cached 本地保留服务器删除

在新版 Git 中可以用 git remote rename 命令修改某个远程仓库的简短名称,比如想把 pb 改成 paul,可以这么运行:

$ git remote rename pb paul
$ git remote origin pau

注意
对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了paul/master。

碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行 git remote rm 命令:

$ git remote rm branchA

或者使用

 $ git push origin :xx //删除远程
 
 $ git branch -d xx //删除本地
$ git checkout 指定分支 指定文件

$ git checkout master HFFrame/Global/Global_macro.h
$ git clone git://10.150.150.136/test.git test

第一次:

$ git pull git://10.150.###.###/test.git master
或
$ git pull ssh://10.150.###.###/test.git master

以后:

$git pull origin master

指定好配置文件后可以直接执行pull push 不用跟后面的分支 骨干

具体方法是 仓库跟目录 .git/config 

 [core]
           repositoryformatversion = 0
           filemode = true
           bare = false
           logallrefupdates = true
           ignorecase = true
   [remote "origin"]
           fetch = +refs/heads/*:refs/remotes/orig    in/*
           url = ssh://git@git.huaxia.com:6521    /cmblife.git
   [branch "master"]
          remote = origin
          merge = refs/heads/master
   [branch "hufeng"]
          remote = origin
          merge = refs/heads/hufeng

如果是提交到master分支:

$ git push origin master

警告远程代码库应该是一个空的bare库,否则会搞乱working copy!!如果working copy是干净的,可以使用git checkout -f来同步代码库。如果已经做了修改,则就没有很好的办法恢复同步状态了!

有时候在本地创建的分支希望分享到远程代码库的分支里,下面命令会在远程创建一个名为branch的分支,并且和本地的branch分支关联起来

$ git push origin branch

以后,即可使用 git push 来分享代码到远程库。

有时候需要在本地获取一个远程分支,使用这个命令:

$ git branch --track origin/branch

以后即可使用 git pull 来获取远程的更新

$ get fetch --all

可能的错误

$ git remote addorigin git@github.com:defnngj/hello-world.git

错误提示:fatal: remote origin already exists.

解决办法:

$ git remote rm origin

然后在执行:$ git remote add origin git@github.com:defnngj/hello-world.git 就不会报错误了

基本流程步骤

git .init
git add *
git remote add origin dev@faa
git commit -a -m “”
git push origin master



相关文章:

  • 开源2D游戏引擎(JavaAndroid),LGame-0.3.2版正式发布
  • Windows内存原理与内存管理
  • CruiseControl.NET : Email Publisher cc.net mail 配置(建议初学者必看)
  • 从 中文分词 展开的 胡思乱想
  • 敏捷开发,持续集成 CruiseControl.NET 自动发布 我的一点小实践 其中配置文件替换部分挺重要...
  • 续接上篇 cc.net 自动发布web应用程序 配置文件的替换
  • 敏捷开发,持续集成 fxcop 在 CruiseControl.NET中的使用
  • 前++和后++的实现
  • 函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)
  • __declspec关键字详细用法
  • 关于C#间接继承的一些思考:如何修改继承函数的返回值类型
  • 谈谈小弟最近暗自干些什么勾当(LGame WP版开发进度汇报)
  • VC++多线程编程
  • 恐怖绝伦,SOPA和PIPA捅了网站窝!
  • 过年收拾旧货,散点Java游戏源码
  • 03Go 类型总结
  • create-react-app项目添加less配置
  • download使用浅析
  • JavaScript服务器推送技术之 WebSocket
  • JavaScript类型识别
  • JAVA并发编程--1.基础概念
  • LintCode 31. partitionArray 数组划分
  • Netty 4.1 源代码学习:线程模型
  • Octave 入门
  • php的插入排序,通过双层for循环
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 官方解决所有 npm 全局安装权限问题
  • 排序算法之--选择排序
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 首页查询功能的一次实现过程
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 再谈express与koa的对比
  • 在Mac OS X上安装 Ruby运行环境
  • 终端用户监控:真实用户监控还是模拟监控?
  • 主流的CSS水平和垂直居中技术大全
  • mysql面试题分组并合并列
  • 关于Android全面屏虚拟导航栏的适配总结
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (11)MATLAB PCA+SVM 人脸识别
  • (11)MSP430F5529 定时器B
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (原創) 物件導向與老子思想 (OO)
  • (转)ObjectiveC 深浅拷贝学习
  • (转)创业的注意事项
  • **python多态
  • ./configure、make、make install 命令
  • .CSS-hover 的解释
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .Net Core 中间件验签
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET中使用Protobuffer 实现序列化和反序列化