Git 笔记

  • git 修改用户名和邮箱


  • git clone速度慢,bash下执行如下命令,可走代理模式,亲试 可达1M/S

  git config --global http.proxy socks5://127.0.0.1:1080
  git config --global https.proxy socks5://127.0.0.1:1080
  • git status:要随时掌握工作区的状态,使用git status命令。
  • git diff:如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
  • git log:在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看
  • git log:命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数
  • git reflog:在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^ 回退到second commit
    版本时,再想恢复到third commit,就必须找到third commit的commit id。Git提供了一个命令git reflog
    用来记录你的每一次命令
$ git reflog
8948d5d HEAD@{0}: reset: moving to 8948d5d3cf74480d175b56ac2fdb44b9cba1587a
7e6b459 HEAD@{1}: reset: moving to HEAD^
//注意HEAD^ 表示上一个版本
8948d5d HEAD@{2}: commit: Third commit
7e6b459 HEAD@{3}: commit: second commit
4215e65 HEAD@{4}: commit (initial): first commit

终于舒了口气,第三行显示third commit的commit id是8948d5d,现在,你又可以乘坐时光机回到未来了。

  • 注意
    HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
    在Git中,用HEAD表示当前版本,也就是最新的提交8948d...587a(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^
    比较容易数不过来,所以写成HEAD~100
    穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
    要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

Git不用输入用户名和密码

在每次使用git push的时候都需要输入用户和密码,是不是觉得很麻烦,为了提高效率
我们可以不需要输入密码就直接提交,我们知道Github获取远程库时,有ssh方式和https方式


两个方式的url地址不同,认证方式也不同。使用ssh时保存密钥对以后可以不再输入帐号密码,而https却不能。所以如果想要不再输入帐号密码,一种方式就是在git clone的时候使用ssh方式另一种方式就是改变remote远程url,如下:

$ git remote rm origin  
$ git remote add origin git@github.com:houlucky/Days.git

创建版本库

1.git init 命令把这个目录变成Git可以管理的仓库

2.用命令git add告诉Git,把文件添加到暂存区
git add .一次添加所有改动过的内容,注意后面有个点

$ git add readme.txt
//执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功

3.用git commit 告诉Git,把暂存区的所有内容提交到当前分支

$ git commit -m “本次提交的说明”

版本回退

  • 版本的历史之间穿梭,使用git reset --hard commit_id
  • 查看提交历史,以便确定要退回哪一个版本git log
    该命令显示从最近到最远的提交日志,如果嫌输出信息太多,可以试试加上--pretty=oneline参数
  • 查看命令历史,以便确定要回到未来的哪个版本git reflog

管理修改

  • 查看工作区与版本库里面最新版本的区别git diff HEAD -- readme.txt

撤销修改

  • 丢弃工作区的修改git checkout -- readme.txt
  • 不但改乱了工作区某个文件的内容,还添加到了暂存区,想丢弃更改
git reset HEAD readme.txt //回到场景1
git checkout -- readme.txt 
  • 如果已经提交到了版本库,可参考版本回退

删除文件

  • 从版本库删除文件,使用git rm readme.txt删掉,并且git commit
  • 把误删的文件恢复到最新的版本
$ git checkout -- readme.txt
//git checkout其实是用版本库里的版本替换工作区的版本,无论是工作区修改还
是删除都可以一键还原

添加远程库

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

克隆远程库

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快

创建与合并分支

查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
<name>分支的名字

解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
git log --graph命令可以看到分支合并图。

$ git log --graph --pretty=oneline --abbrev-commit```

###分支管理策略
通常,合并分支时,如果可能,Git会用**Fast forward**模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用**Fast forward**模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
![](http://upload-images.jianshu.io/upload_images/1715286-4567554d88499b68.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在实际开发中,我们应该按照几个基本原则进行分支管理:首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。所以,团队合作的分支看起来就像这样:

![](http://upload-images.jianshu.io/upload_images/1715286-c43fc57a0762ee12.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上**--no-ff**参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

$ git merge --no-ff -m "merge with no-ff" dev


###Bug分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
###feature分支
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
###多人协作
**推送分支:**
推送分支就是把该分支上的所有本地提交(commit)推送到远程库.推送时要指定本地分支,这样,Git就会把该分支推送到远程库对应的分支上:

$ git push origin master

如果要推送其他分支,比如dev,就改成:

$ git push origin dev


但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
- master分支是主分支,因此要时刻与远程同步;
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

**多人协作的工作模式:**
1.首先,可以试图用```git push origin branch-name```推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用```git pull```试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用```git push origin branch-name```推送就能成功!

- 如果```git pull```提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令```git branch --set-upstream branch-name origin/branch-name```这就是多人协作的工作模式,一旦熟悉了,就非常简单。
- 在本地创建和远程分支对应的分支,使用```git checkout -b branch-name origin/branch-name```,本地和远程分支的名称最好一致。





###其他
- 随时掌握工作区的状态```git status```
- 查看修改的内容```git diff```
- 查看远程库的信息,用```git remote```
- 显示更详细的信息,用```git remote -v```
- ```git push```出错```fatal: Could not read from remote repository.Please make sure you have the correct access rights.and the repository exists```出现这个问题是因为,没有在github账号添加SSH key
**解决办法:**
在git bash输入:

ssh-keygen -t rsa -C "用户名"

然后一路回车,在```C:\Users\asus\.ssh```可以看见**id_rsa.pub**,把里面的内容复制粘贴到github上的**ssh key**就行了

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

推荐阅读更多精彩内容