git 学习笔记

svn    cvs 集中式版本管理 git 分布式

1:简单介绍:把改动推入(Push)到上游版本库(upstream repository)。

     把远程版本库里的改动拿到本地版本库中,需要两步。第一步,把改动取来(Fetch),把远程版本库的版本和分支复制到本地版本库中。第二步,在本地版本库中,把从远程版本库取来的改动与自己本地的改动合并(merge)。

一般说来,取入和合并操作总是先后执行,因此在git中,一个命令(pull)可以完成。

2:主分支(master branch)锁机制。

严格锁(strict locking) :一个人检出(check out )一个文件时,在其(check in)之前,不允许其他人修改。

乐观锁(optimistic locking):基于一个假设,大多数时候大家不同时修改一个文件。

3 :git命令

git config --global user.name “AAAAA”                           // 全局变量

git config --global user.email “AAAAA@QQ.COM”           //邮件地址,以方便联系修改者

git config --global --list                                                    //列出上述设置的变量

git config --global color.ui "auto"

git gui //启用git图形界面   gitk //图形化界面,查看版本当前分支历史信息  gitk ——all 可显示全部分支的历史。

gui 和 gitk 后加&符号可以在新进程中运行,不会导致命令窗口死掉。

git help <command> //git-htmldoc

4:亲自建一个项目

(1)mkdir mysite (2)cd mysite(3)git init(4)git add index.html(5)git commit -m "add in hello world HTML"//git commit 创建一个提交记录。书写提交留言。两个-m参数表示两段留言。

(6)git log 可以看到提交的相关信息。(-1 列出最近一个修改的) git log --pretty=oneline //一句话显示

(7)修改文件后,git status //提示git检测到了修改,但还不知道如何处理他们。如果要提交,需要暂存(stage)修改。git中有三个地方可以存放代码,第一个工作目录树,第二个暂存区(索引index),第三个最终的一个是版本库。

(8)git add 暂存 git commit提交

(9)提交留言应该些什么?

3.4理解并使用分支

git branch RB_1.0 master//新分支名称 父分支名称

git commit -a //它告诉git提交全部修改过的文件,弹出的txt文件添加提交留言。

git checkout RB_1.0 切换分支的命令,不同分支上的文件不一样

git tag 1.0 RB_1.0 //为RB_1.0分支的末梢打一个名为“1.0”的标签,git tag //可以查看版本库中的标签列表。

切换到主分支,运行git rebase RB_1.0 可以把RB_1.0分支上的修改合并到主分支上。

变基的意思是“改变分支的基底”,分支A和B,它们的分叉点是版本Y。git的实现方法是,如果站在分支B上告诉git“我要变基到A的末梢”,那么git会把Y到分支B当前末梢之间的所有提交,顺序加到A的末梢上去,生成系的呢分支B,而分支A没有任何变化。

git branch -d RB_1.0 删除分支RB_1.0

从刚才打标签的地方1.0 在创建分支,打补丁git branch RB_1.0.1 1.0

为代码发布创建归档文件rat,zip包。

git archive --format=tar --prefix=mysite-1.0/ 1.0 | gzip >mysite-1.0.tar.gz  format指明格式输出 prefix 指明目录 和 1.0标签 产生的tar文件用管道输出的方法传递给gzip进行压缩

git archive --format=zip--prefix=mysite-1.0/ 1.0 | gzip >mysite-1.0.

3.6

git clone 远程版本库的位置 本地目录

4.1暂存

暂存操作将会更新git内部的索引(index),也叫做暂存区(staging area)。通过暂存区,可以设置哪些变更要提交到版本库,哪些先不提交。

git add -i 启动交互命令提示符,交互暂存新文件。

1 status 2 update(暂存) 3 revert(取消暂存)4 add untracked(暂存未跟踪的的文件)5patch(补丁模式) ?帮助 y接受修改 n 忽略修改 a d添加或放弃剩余的修改

git add -p //启动补丁模式 输入y 文件就处于暂存状态并准备提交。

4.2 提交

(1)git add some—file//提交暂存后的修改 git commit -m “changes”

(2)git commit -m “change to some-file” -a//提交工作目录树中所有修改

(3)git commit -m "change to some-file" some-file  //提交指定修改

git config --global alias.ci "commit"  起别名 ci==commit

 4.3查看修改内容

git diff 比较的使工作目录树与暂存之间的区别

git diff --cached//比较暂存区和版本库的区别

git diff HEAD//可以比较工作目录树与(包括暂存和未暂存的修改)与版本库的区别

git commit -a -m

4.4 管理文件

git mv <原文件名> <新文件名> 也可以:移动文件,git add ,git rm 旧文件

git真正关心的是文件本身的内容,产生一个swap为后缀的临时文件,把文件名加入到版本库的.gitignore文件中,把 “.*.swap”添加到.gitignore文件中。

如果仅仅是本人需要的忽略,就将它添加到.git/info/exclude文件中。

5分支

(1)给分支改名,git branch -m master mymaster//把主分支改名

(2)创建分支 1试验性修改2增加新功能3bug修复

git branch new 创建new分支。git checkout new //检出分支

git checkout -b <新分支> <父分支> //立即检出 提交时,提交到检出分支

(3)直接合并 切换到目标分支,git merge <分支名>

压合合并 将一条分支上的所有历史提交(提交密切相关,新功能,bug修复)压合成,一个提交,提交到另一个分支上

git merge --squash contact//将contact两条提交合并到当前工作区并暂存。

拣选合并//有时候要合并的仅仅是一个提交,这时适合采用拣选合并

git cherry-pick <提交号> //挑选出所要的改动

git reset --hard HEAD^ //删除最后一个提交

git cherry-pick -n    //完成拣选,不立即提交,暂存起来,一旦拣选完各个提交运行git commit 命令进行提交。

5.4冲突处理

git merge

<<<<<<< HEAD //当前分支

javascript             //冲突内容

=======

duan                     //冲突内容

>>>>>>> about2 ////待合并分支

简单的手工编辑,复杂的工具kdiff3 mac opendiff

git mergetool 修改后git commit

5.5删除分支

打了标签就可以删除分支。只是删除分支名称而已。

git branch -d about//使用-D操作,git就无须检查要删除分支上的内容是否全部合并过来。

分支重命名

git branch -m contact contacts

6 git log j向下 k向上 q退出

git log 7b1558c / git log -p显示详细信息 

6.2 指定查找范围

git log --since=“5 hours”//最近5小时内的提交。

git log --before="5 hours" -1 5小时之前,最后一个提交。

git log <老版本>。。 <新版本> //HEAD表示最新版本, ".."也表示HEAD。

git log --pretty=format:“%h %s”  显示哈希值的缩写及留言的第一行。

git log --pretty=oneline  

“18f822e^”一个脱字号作用相当于回溯一个版本, 如果某个节点有并列的多个父节点时,“^1”代表第一个父节点,“^2”代表第二个父节点。

git log -1 HEAD^^^ 和 git log -1 HEAD^~2 和 git log -1 HEAD~3

6.3  查看版本之间差异。

git diff 18f822e 显示和当前目录树的差别

git diff --stat 1.0 统计数据代码改动

6.4跟踪文件

git blame -L 12,13 hello.html

git blame -L 12,+2 hello.html //查看文件hello.html

git blame -L "/<\/body>/",-2 456456e4^ -- hello.html//查看文件hello.html在之前的提交日志

6.5跟踪内容

git blame -M original.txt //检测内容是否重复

git blame -C -C <文件名>//显示文件复制信息

git log -C -C -1 -p

6.6撤销修改

增补提交  处理小错误

git commit -C HEAD -a --amend//增补提交只能针对最后一个提交,-C复用之前的留言,-c修改留言

反转提交,撤销这个提交,或者revert它。

git revert //创建一个反向的新提交

git revert -n//先不要提交,使用于反转多个提交。

复位

git reset head^//复位到head 之前的一次提交

git reset 540ecb7~3 //把版本库复位到 54 的曾祖父节点上,并把54,54的父节点,54的祖父节点上的修改扔到工作目录树中。

--soft 参数可以暂存因复位带来的差异,但不提交它

--hard //慎用,不可以恢复

git reset --hard HEAD^

6.7重新改写历史记录

(1)给历史记录重新排序,让它们看起来更合理。git rebase -i HEAD~3 改变行的位置

(2)将多个提交压合成一个提交。git rebase -i HEAD~3 //将pick改为squash

(3)讲一个大的提交,分解为多个提交

第106页 

git rebase -i HEAD~4// edit 开头

git reset HEAD^    git diff

git commit -m                       git commit -m

git rebase --continue


7.1网络协议

git 最快,ssh安全 https 和http 防火墙

ssh 写入 git只读

git branch -r//显示远程分支和本地分支

7.3同步

git fetch 更新远程分支

git pull 取来,合并

git push 

7.5添加新的远程版本库

p98

git pull git://ourcompany.com/dev-erin.git //做一次拖入操作

git remote add <erin>  git://ourcompany.com/dev-erin.git

如果一个版本库经常用来接受推入,那么它最好不要有本地改动,最好不要有本地工作目录。

可以在 git init 命令加上参数--bare。

8 管理本地版本库

git tag 1.1 //创建标签

git checkout 1.0 //跑到三不管地带了

git checkout -b from-1.0//创建并检出一个新分支

修改发布版本中出现的bug

git branch RB_1.0.1 1.0 基于标签创建一个新的分支 git checkout  RB_1.0.1

修正bug完后, 创建一个新的标签。git tag 1.0.1

git checkout master , git branch -D RB_1.0.1//git不能删除当前检出的分支。

8.4记录和管理多个项目

多个项目共享一个版本库,多项目多版本库。

9 github网站

$ cd your_repo_root/repo_name

$ git fetch origin

$ git checkout gh-pages

派生项目,如果想向一个自己没有权限的项目贡献代码,gihub提倡使用派生(forking)。githu会为你的用户复制一份该项目,使用这个办法米项目维护者不用操心为了推送权限把其他人加为合作者的麻烦。大家可以派生一个项目副本进行推送,而后项目维护者可以把这些副本添加为远程仓库,从中拉取更新的内容进行合并,

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

推荐阅读更多精彩内容