GIT笔记

<a href="https://github.com/daelephant/learngit/blob/master/Git%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/git%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.md#git笔记" >GIT笔记:</a>

1. 工作区(Working Directory)和版本库(Repository)

Paste_Image.png

说明:

工作区就是创建仓库的文件夹如(learngit文件夹就是一个工作区)
版本库就是工作区的隐藏目录.git,版本库中有暂存区(stage/index)和分支(master)
git add 实际是把文件添加到暂存区, git commit 把暂存区的内容提交到当前分支

2.创建版本库

1创建git仓库文件夹,名为:learngit
$ mkdir learngit
2进入leadngit文件夹
$ cd learngit
3初始化git仓库
 $ git init

3. 添加文件

1在leangit下添加一个readme.txt文件,并编辑一些内容
2添加到仓库暂存区()在暂存区 文件会变绿
$ git add readme.txt
3提交readme.txt文件到当前分支, -m "提交说明"(只有进行 git add 后 go commit 命令才有效)
$ git commit -m "add readme.txt"

4. 修改文件

4.1 当文件在工作区时

1查看readme.txt文件内容
$ cat readme.txt
2修改readme.txt文件内容
vi readme.txt
3查看仓库状态
$ git status
4添加到仓库暂存区,并提交到分支
$ git add readme.txt
$ git commit -m "modify readme.txt"

4.2 当文件在暂存区时

1修改文件内容
vi ***
2添加到仓库暂存区
$ git add readme.txt
3提交到分支
$ git commit -m "modify readme.txt at the stage"

5. 撤销修改文件(未提交到分支)

5.1 当文件在工作区时

1执行撤销命令
$ git checkout -- readme.txt

5.2 当文件在暂存区时

1令文件回到工作区
$ git reset HEAD readme.txt

2执行撤销命令

$ git checkout -- readme.txt

6. 版本控制(无限次后悔)

说明:在Git中,HEAD表示当前版本,HEAD^表示上一版本 HEAD^^表示上上一个版本
1查看提交日志输出(完整版)

$ git log

2查看提交日志输出(精简版)

$ git log --pretty=noline

3回到上一版本

$ git reset --hard HEAD^

4回到指定版本(hard 后面添加版本号)

$ git reset --hard ea34578

5查看命令历史

$ git reflog

7. 远程仓库(github)

7.1 添加到远程库

1在github上创建一个名为learngit的空仓库
2在本地learngit仓库下运行命令

$ git remote add origin git@github.com:iphone5solo/learngit.git

3把本地内容推送到github远程库上(第一次push 参数带 -u关联远程仓库)

$ git push -u origin master

注意:如果在git push -u origin master时出现以下错误,证明电脑没有修改远程仓库的公钥,

Permission denied (publickey).fatal: Could not read from remote repository.
Please make sure you have the correct access rightsand the repository exists.

解决方法:
1在github上点击Edit profile--> SSH and GPG keys --> new SSH key添加SHH公钥
2打开id_rsa.pub文件(/Users/iphone5solo/.ssh/id.rsa.pub
3将id_rsa.pub文件内容拷贝到key就可以了,title随便填。

7.2 从远程库克隆

1在github上创建一个名为clonegit的仓库
2使用命令克隆仓库

$ git clone git@github.com:iphone5solo/clonegit```
####7.3 从远程仓库更新本地仓库(已关联)
    $ git pull origin master
#8. 分支管理
####图文说明:
master分支是一条线,git用master指向最新的提交,在用HEAD指向master,以此才确定当前分支,和提交点。
![](http://upload-images.jianshu.io/upload_images/2926249-d10263e04bac1416.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
######1. 创建分支
当我们创建新的分支,例如newBranch,git就会新建一个指针newBranch,指向master相同的提交,再把HEAD指向newBranch,就表示当前分支在newBrach上
![](http://upload-images.jianshu.io/upload_images/2926249-9ff2b5327a11e2a7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
######2. 新分支的修改和提交
现在对工作区的修改和提交就是针对newBranch分支了,比如新提交一次后,newBranch指针就向前移动一步,指向最新提交,而master指针指向不变。
![](http://upload-images.jianshu.io/upload_images/2926249-87c95d0c239a4be8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

######3. 分支的合并
把newBranch合并到master上,直接把master指向newBranch的当前提交,就完成了合并。
![](http://upload-images.jianshu.io/upload_images/2926249-90c5ce3d210a14d3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

######4. 合并完成删除分支
删除分支newBranch,就剩下一个master分支
![](http://upload-images.jianshu.io/upload_images/2926249-6d1d4b20f274783f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
######5. 查看分支合并图解
![](http://upload-images.jianshu.io/upload_images/2926249-6a6bb331c97a0329.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
<strong>关于分支的主要命令如下</strong></p>

<ul>
<li><p>查看分支</p>

<pre><code>$ git branch
</code></pre></li>
<li><p>创建<code>newBranch</code>分支</p>

<pre><code>$ git branch newBranch
</code></pre></li>
<li><p>切换<code>HEAD</code>指向<code>newBranch</code>分支</p>

<pre><code>$ git checkout newBranch
</code></pre></li>
<li><p>创建+切换分支</p>

<pre><code>$ git checkout -b newBranck
</code></pre></li>
<li><p>合并某分支到当前分支</p>

<pre><code>$ git merge newBranch
</code></pre></li>
<li><p>普通删除<code>newBranch</code>分支</p>

<pre><code>$ git branch -d newBranch
</code></pre></li>
<li><p>强行删除<code>newBranch</code>分支</p>

<pre><code>$ git branch -D newBranch
</code></pre></li>
<li><p>查看分支合并状况</p>

<pre><code>$ git log --graph --pretty=oneline --abbrev-commit
</code></pre></li>
</ul>
<h3>9. 藏匿当前未提交的分支</h3>

<p>如: 当前在修改自己的分支<code>dev</code>,突然项目经理要求修复一个bug-07</p>

<p>解决方法: </p>

<ol>

<li><p>藏匿当前<code>dev</code>分支的工作状态</p>

<pre><code>$ git stash

</code></pre></li>

<li><p>新建一个<code>bug-07</code>分支</p>

<pre><code>$ git branch -b bug-07

</code></pre></li>

<li><p>修复bug并提交,合并<code>bug-07</code>到<code>master</code>分支</p>

<pre><code>$ git commit -m "fix the bug-07"

$ git checkout master

$ git merge --no-ff -m "merge bug-07" bug-07

</code></pre></li>

<li><p>删除<code>bug-07</code>分支</p>

<pre><code>$ git branch -d bug-07

</code></pre></li>

<li><p>查看当前<code>stash</code></p>

<pre><code>$ git stash list

</code></pre></li>

<li><p>恢复<code>dev</code>分支的工作状态,并删除stash内容</p>

<pre><code>$ git stash pop

</code></pre></li>

</ol>

<h3>10. 多人协作</h3>

<ul><li><p>查看远程库信息</p>

<pre><code>$ git remote</code></pre><ul>

<li><p>详细查看远程信息</p>

<p>```$ git remote -v```</p></li>

<li><p>推送分支到远程库</p>

<p>```$ git remote origin master```</p></li>

<li><p>抓取远程分支</p>

<p>```$ git pull origin master```</p></li>

</ul></li>

</ul>

<h3>11. 标签管理</h3>

<ul>

<li><p>创建一个标签,默认为<code>HEAD</code>当前分支添加标签</p>

<pre><code>$ git tag v1.0

</code></pre></li>

<li><p>为版本号为<code>e8b8ef6</code>添加<code>v2.0</code>标签</p>

<pre><code>$ git tag v2.0 e8b8ef6

</code></pre></li>

<li><p>为版本号为<code>6cb5a9e</code>添加带有说明的标签,<code>-a</code>指定标签名,<code>-m</code>指定说明文字</p>

<pre><code>$ git tag -a v3.0 -m "version 0.2 released" 6cb5a9e

</code></pre></li>

<li><p>根据标签查看指定分支</p>

<pre><code>$ git show v0.2

</code></pre></li>

<li><p>查看所有标签</p>

<pre><code>$ git tag

</code></pre></li>

<li><p>删除<code>v1.0</code>标签</p>

<pre><code>$ git tag -d v1.0

</code></pre></li>

<li><p>把<code>v0.9</code>标签推送到远程</p>

<pre><code>$ git push origin v0.9

</code></pre></li>

<li><p>推送所有尚未推送到远程的本地标签</p>

<pre><code>$ git push origin --tags

</code></pre></li>

<li><p>删除远程标签, 先删除本地标签,再删除远程标签</p>

<pre><code>
$ git tag -d v0.9</br>
$ git push origin :refs/tags/v0.9

</code></pre></li>

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

推荐阅读更多精彩内容

  • 最近使用Git时感到有些生疏,所以利用晚上空余时间将廖雪峰Git教程重新系统的学习一边并做了笔记,温故知新。 Gi...
    LannisZheng阅读 656评论 1 3
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,648评论 4 54
  • 一杯白开水,两本旷世书。夜凉幽山中,清风觅朝露。
    时间下的一场雨阅读 212评论 0 0
  • 未曾立雪门前,仍受恩护如犊。 未曾负笈深山,仍得宝诲如海。 红尘已别昨日非, 爱恨种种心头垒。 得无明月共秋风...
    灵魂刀手阅读 87评论 0 0