git小结

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势, 通俗来讲,它其实是一个具备排序、对比以及合并项目更新等的工具。

1、获取和创建项目

         mdir  tag _name 创建一个空的文件夹

         git  init  初始化一个Git仓库(会在当前目录下生成一个.git 文件目录,Git用来跟踪和管理Git版本库的) 。

       git  clone +[url]   拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改, url是你要复制的项目地址

2. 基本快照

         使用 git add 添加需要追踪的新文件和待提交的更改, 然后使用 git status和 git diff 查看有何改动, 最后用 git commit 将你的快照记录进行提交。这就是使用的基本流程,绝大部分时候都是这样的。每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为" commit "。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

 git status  查看你的文件在工作目录与缓存的状态

   git  diff +路径  查看当前文件已修改了哪些内容

   git  add 把修改的文件添加到暂存区stage(或者叫index)

   git  commit -m  "备注"   从缓存区添加到当前分支

   git  commit --amend   用来追加修改,不会产生新的提交记录

   git checkout--文件名/路径  撤销本地修改

   git  log查看从近到远的提交记录

   git  reset  --hard HEAD^  表示回退到上一个版本

   git  reflog  查看你的每一次提交ID

   如果不小心提交了错误的信息,我们是可以使用Git命令回退到历史版本,当然Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,

也就是最新的提交记录(注意每一条提交记录都会有一个唯一标识的ID),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

如果想要回退到修改之前的版本,可以使用 git reflog 查看保存的提交记录的ID, 再使用git reset --hard commit_id返回到你修改之前的版本。

3、分支与合并

一般就是使用git branch 命令列出、创建与管理工作分支,使用git checkout命令切换到新的分支上下文.

git branch  local_branch     新建本地分支(不会改变分支指针)

git checkout  branch_name  切换到某个已存在的分支(本地的或远程的)

git checkout -b local_branch   新建并且换到本地分支

git branch -d  branch_name  删除分支

git branch –D branch_name  删除本地分支(只能删除本地创建的分支,因为 远程分支所有人都没有权限删除)

git reset --hard tag_name     放弃本地修改的内容.  这个方命令是把本地库当前分支的代码重置到tag节点的状态。(可能会丢失本地的修改,慎用)

二、Repo小结

android中使用git作为代码管理工具,开发了Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了Repo命令行工具,对git部分命令进行封装,将百多个 Git 库有效的进行组织。

1、清单文件库的介绍

    一个清单库可以包含多个清单文件和多个分支,每个清单文件和分支都有对应的版本。清单文件以xml格式组织的。举个例子:

         remote元素:定义了名为korg的远程版本库,其库的基址为git://172.16.1.31/

          default元素:设置各个项目默认远程版本库为korg,默认的的分支为gingerbread-exdroid-stable。当然各个项目(project元素)还可以定义自己的remote和revision覆盖默认的配置  。    

          project元素:用于定义一个项目,path属性表示在工作区克隆的位置,         

          name属性:表示该项目的远程版本库的相对路径      

          project元素的子元素copyfile: 定义了项目克隆后的一个附件动作,从src拷贝文件到dest 。

2repo常用指令

repo init -u []

        在当前目录下安装 Repo。这会产生一个 .repo/ 目录,目录包括装 Repo 源代码和标准 Android 清单文件的 Git 仓库。

                   .repo/目录还包括 manifest.xml,是一个在 .repo/manifests/ 目录选择清单的符号链接。

                   例如:repo init -u

ssh://192.168.10.10:29418/cory/manifest -m cory_study.xml(不同项目xml不同),自动生成隐藏文件.repo

参数:

-u:指定一个恢复清单仓库的地址(URL)。

-m:在仓库里选择一个清单文件。如果没有清单名称,那么默认是 default.xml。

-b:指定一个修正,例如,一个特殊的清单分支(manifest-branch) 。

repo sync []

 下载新的更改,更新在你本地环境中的工作文件。如果你不带参数运行 repo sync,它将同步所有项目的文件。

例如:拉取整个手机系统代码 repo sync -cj4 (-c代表只拉取某个分支,j4代表线程数目)

repo upload []   

在指定的项目中,Repo 把本地分支的更新比作远程分支在最后一次 Repo 同步。Repo 会提示你选择一个或更多尚未上传审查的分支。

repo diff []      

在 commit 和工作目录之间使用 git diff 显示明显差异的更改。

repo download  

从审查系统下载指定的更改,然后使它在你的项目的本地工作目录中可用。

repo branch      查看本地分支

repo prune []        删减(删除)已经合并的标题。

.repo/manifest.xml         查看项目是由哪些git库组成的

repo start []            一个新分支的发展,从清单中指定的修正开始的。

参数:

参数应该提供一个更改的简短说明给你正在尝试建立的       项目。如果你不知道,那就考虑使用默认名称。

指定将要参与这个主题分支的项目。

注意:"." 是当前工作目录下的项目的一个方便的简写。


6、git log --pretty=oneline               只查看提交名字

7、git reset --hardHEAD^                回退到上个版本,上上个版本后面两个^^,一次类推

8、git reset --hardHEAD~100         会退到前100个版本

9、cat readme.txt                              查看文件内容

10、git reflog                                       查看当前版本后的版本号

11、git reset --hard 版本号           回到版本号对应的版本

12、Ctrl+z                                             退出编辑

vim readme.txt i编辑 Esc 退出编辑:x保存退出

13、git checkout --readme.txt       撤销还未添加到暂存区的内容,添加到暂存区后无法用该命令撤销

14、rm b.txt                                         删除文件,后两种情况,commit提交为从版本库中彻底删除此文件;用checkout命令恢复文件,然后提交

15、git push -u originmaster          把本地仓库分支master内容推送到元仓库去

         gitpush origin master

16、git remote and

origin http://github.com/zhanguoliang/testgit.git         关联本地库

17、git clonehttp://github.com/zhanguoliang/testgit2.git                              从元仓库克隆一个本地库

18、git checkout -b name                          创建并切换分支name

19、git branch                                     查看有哪些分支

20、git checkout name                            切换到分支name(???)

21、git merge name                                   在master分支上合并name分支内容

[if !vml]

[endif]

产生冲突(conflicts)

22、git branch -d name                     删除name分支

23、git branch name                         创建分支name

24、git log --graph --pretty=oneline --abbrev-commit        查看进行过的操作

25、git merge --no-ff -m "合并禁用fast forward"              合并后删除分支后,还可以找到被删除的分支的信息


a、bug分支

1、当前分支上工作没有提交,有新的bug需要处理

gitstash                  将当前的工作现场隐藏起来

gitstash list              查看工作现场

gitstash apply             恢复工作现场

gitstash drop              删除一条stash,因为工作空间恢复后,stash的内容并不会删除

gitstash pop              恢复的同时把stash内容删除

b、多人协作

gitremote                  查看远程库的信息

gitremove -v               详细信息

gitpush origin master      推送本地代码到远程库

git push originname        推送到name分支

c、抓取分支


git pull 与 git pull --rebase

https://stackoverflow.com/questions/18930527/difference-between-git-pull-and-git-pull-rebase

http://www.cnblogs.com/iammatthew/archive/2011/12/06/2277383.html



git config

利用这个命令可以新增、更改Git的各种设置,例如:配置本地的用户名和邮箱

1) 配置使用git仓库的人员姓名

       git config --global user.name "YourName Comes Here"

2) 配置使用git仓库的人员email

       git config --global user.emailyou@yourdomain.example.com


15、git cherry-pick commit-id (多个分支的提交,不常使用,容易出错)

      公共问题的修改,例如先修改master公共分支,还需要添加到212kk_base分支上

1、先记一下master分支上本次修改的commit_id(注意不是change_id)

2、git checkout g212kk_base切换分支

3、git cherry-pick commit-id

4、git push origin HEAD:refs/for/g212kk_base

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,456评论 1 26
  • 前路未知,只是想睡觉! 干工作都变成了内耗,这种如何让人成长,又如何让工作起色,更如何做出贡献,这都是值得考量的问...
    聂一一阅读 137评论 0 0
  • 一年多没见面了,最近突然QQ上开始聊天,对你的感情慢慢的变了,没有想给你打电话的冲动,只是一个人默默的努力,加油!
    嘉银小周周周守莲1858585阅读 150评论 0 0