Git&Github学习笔记

感想:以前学习了好几次Git,看了几个人的技术文档,可是总不会用,当然也有可能是因为我太笨,很多人把Git教程写的很高深,一堆代码看的我头晕,遇到简单的查查还能行,可是随着越来越深,积累的问题越来越多,最后学习总是中断,不得不从头来,来回折腾,真是恼火,恼怒自己的智商不够!

后来一个朋友向我推荐了廖老师的Git学习方法,我一学习,就停不下来了,在研期间任务多,利用空闲时间花了一个礼拜总算学完,认识也比较深刻,学习了廖老师的Git教程,总体感觉廖老师很走心,也很感谢朋友老葛送给我的硬货。

1 Git配置+初始化repository

下载Git,安装;

Git配置

初始化仓库

cd learngit (进入目录)

git init (初始化一个仓库;)

2 Git操作

Git添加文件

使用纯文本编辑,标准编码UTP-8;

将文件放到learngit文件夹下面或者子文件夹下面;

执行如下命令:

git add 文件名

git commit –m “文件更改说明”

git status  (查看仓库的当前状态)

当前提示的修改状态表示文件被修改过了,但是文件修改状态还未被提交!需要再次执行git add 文件名

查看版本回退状态

查询历史快照,截取历史状态;要查询git日志

命令:git log

此命令显示最近到最远的提交日志状态

如果想要控制日志更好的显示

命令:git log –pretty=oneline

回退显示以前的历史数据

命令:git reset –hard HEAD^

显示当前版本内容

命令:cat first.txt

利用版本号返回到后面的某个版本

命令:git reset –hard23cc951

版本号可以不用写全,只需要前几位就可以了,系统会自动查找!

显示所有回退状态:

git reflog

工作区(WorkingDirectory)---就像learngit 文件夹就是一个工作区;

版本库(Repository)---比如说learngit下面的一个隐藏目录.git,里面存储了很多东西,如stage(暂存区),第一个分支(master),以及master的一个指针HEAD;

Git比其他版本控制系统设计的更加优秀,因为Git跟踪涉并管理的是修改,而非文件。

Git保存修改只是将暂存区里的记录,也就是指保存add命令后的版本,不能保存add前的内容;每次修改不把修改后的内容add到暂存区,即使执行了git commit命令,也不能保存这次修改,只能保存以前的修改;commit命令只能保存暂存区stage里面的版本;

撤销修改

1.在工作区做了部分修改,发现修改的地方是有病的,这时候需要撤销修改

命令:gitcheckout second.txt

撤销的是add命令之前的修改;也就是添加到stage暂存区之前在工作区内的修改;

2.在工作区做了修改,然后提交到暂存区了,想要撤销修改

命令:git resetHEAD second.txt

命令:gitcheckout second.txt

第一个命令是将文件从暂存区会退到工作区,第二个命令是将工作区的修改内容撤销掉;

3.如果修改部分从工作区添加到暂存区,又从暂存区保存到版本区(Repository),但是并未推送到远程;此时可通过回退版本来撤销修改!

命令:git reset –hardHEAD^

此命令是将HEAD指针指向前一个版本;

撤销删除

命令:rmsecond.txt

可以删除工作区的文件,但是版本区的仍然存在;

也可以直接在工作区点击删除文件;

两个选择:

1.      删除版本区的版本;

命令:git rmsecond.txt

2.通过版本区回复工作区误删的文件;

命令:gitcheckout second.txt

3 远程库Github

添加远程库

添加远程仓库推送本地进度,既可以使用ssh协议,也可以使用https协议,前者推送较快,后者推送相对较慢,一般使用ssh协议。

登录github账户:TerenceJing

进入桌面端master分支:cd learngit

 

使用https协议

本地仓库远程添加命令:gitremote add origin https://github name

可将本地仓库master分支下的仓库推送出去

orign:远程库

推送本地仓库:gitpush –u origin master

随后输入远程github账户名:Username for ‘https://github.com’:TerenceJing

输入远程github账户命令:Password for’https://[email protected]’:******

推送成功;

从现在起,只要本地做了提交,就可以通过命令:git push origin master 把本地master分支的最新修改推送至github。

此刻,我拥有了真正的分布式版本库,有点按耐不住的激动!

第一次使用clone或者push命令的时候,会认证指纹,并且添加到远程信任列表当中

退出masterBranches

使用ssh协议

在本地创建ssh key,然后在远程Github上面创建ssh key,生成识别指纹,这样在推动提交进度的时候,Github就可以识别出来这是你自己推送的内容,而非别人推送的。

使用命令:ssh –keygen–t rsa –C “[email protected]“

创建了ssh key,生成了fingerprint指纹.

此时,在硬盘上生成了如下文件包:

然后点击.ssh文件,进入看到两个文件:id_rsa和id_rsa.pub,

从后缀名就可以看出前者是私密的,后者是共有的。

本地创建仓库 try ,并进入仓库初始化仓库:

在本地创建文件,并提交进度:

连接远程TerenceJing/try.git仓库

上图首次推送命令执行效果表示建立连接成功,并添加到了信任列表当中。

随后再次推送本地进度:直接使用 git push origin master(注意本地当前仓库,只将本地当前仓库推送到相应的远程仓库)

分支管理

有时候自己的任务没有完成,但是需要提交任务进度,不提交就会有丢失进度的风险,提交任务了但是自己的任务没有完成,别人看到不完整的任务会给别人带来不便。

此时,可以通过建立一个其他的分支类型来隐藏自己提交的不完整内容,别人只能看到master主分支上的任务,看不到新的分支下面的内容,等到任务完成后,可以通过将新分支合并到master主分支上,然后删除新分支即可。

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

手动解决分支冲突

返回上级目录:cd  ..

创建新的分支feature1,在master分支和feature各做修改,提交进度;

变成如下进度所示:

查看状态,告知我们有文件未合并

查看文件内容,会看到有两个分支都做了修改。

此时解决冲突的办法就是手动修改文本内容,替换为:

Creating a new branch is quick and simple.

然后重新提交,并删除featrure1分支;

查看分支合并图:gitlog --graph

合并现状:

分支管理策略

多分支管理,禁用Fast forward合并模式,不要将master主分支移动,或许存在多个分支,此时可以多分支在某一个时间点合并,然后将合并后的分支合并到主分支上,起到了多人并发工作的作用。

命令:git merge –no-ff–m “merge no ff” dev

禁用Fast forward模式,用普通模式合并,在主分支上重新添加一个修改进度名,并将dev分支合并到主分支master上。

禁用Fast forward模式;可以建立多个分支dev、feature1、featrue2……,多个员工使用多个分支,将自己的分支合并到dev分支上,完成一定任务时在合并到master主分支上,发布出去。

分支Bug

情景:主分支master,在利用次分支dev完成任务,需要两个小时才能完成这个模块,然后才能提交,但是主分支上有一个Bug需要修复(一般改动都是在建立的次分支上完成,然后合并到主分支),并且比较紧急,要立刻完成。此时dev分支上的任务并没有完成,如果想要返回到主分支master修复Bug,就需要保存dev的工作现场,等到修复完Bug后返回dev分支上,回复工作现场,接着工作完成任务。

在dev分支上保存工作现场命令:git stash

在dev上查看工作现场命令:git stash list

在dev上回复工作现场

命令1:git stash apply

回复后,stash内的内容并不删除用命令: git stash drop删除保存记录;

命令2:git stashpop

恢复工作现场的同时,删除了保存记录;

如果有多个工作现场,可以恢复指定工作现场

使用命令:git stash apply [email protected]{0}

然后,可以在dev分支上接着工作;

强行删除未合并分支

情景:在工作中,可能需要增加新的功能,但是又不希望增加新功能的实验性质代码打乱原有的代码,这时,就需要建立新的分支Feature1,但是准备合并的分支的时候这个功能突然不需要了,此时需要删除这个废弃的功能分支Feature1.

此时执行删除命令:git branch –d feature1;出现错误:提示有分支为合并,如果要删除分支,需要执行强制删除命令:git branch –D feature1;

多人协作模式branches

有时候不需要全部推送,只需要推送自己负责的分支上的修改任务,可以采用推送指定分支的方法完成;

查看远程分支:git remote

查看远程分支详细信息,可以看到能够被抓去的分支和推送的分支:git remote –v

推送分支命令:git push origin master/dev

针对上述命令,远程仓库默认名称是origin,所以使用 git pushorigin master推送主分支。

有时候因为自己的工作分支对应的远程分支有所更新,当自己想要推送的时候推送不成功,此时,需要将远程分支重新抓取下来,和本地分支合并,解决矛盾冲突,然后将本地分支推送到远程对应的分支;

多人协作模式:

1.      首先,可以试图用git push origin branch-name推送自己的修改;

2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

上述提示推送失败,是应为本地dev分支没有指定到远程origin仓库下的dev分支链接上,用如下命令设置链接:git branch –-set-upstreamdev origin/dev

在执行git pull,则执行成功:

3.如果合并有冲突,则解决冲突,并在本地提交;

4.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

在本地创建和远程分支对应的分支,分支名称最好一致,使用命令:

git branch –b branch-nameorigin/branch-name

4 标签

有时候需要发布特定的版本,因为提交的进度指针太多,需要制定一个特定的快照标签来标识它,就相当于指定到commit后的某个进度的指针,但是这个指针是不可移动的,是特定的;

打标签

切换到分支上打标签:

git checkout master

git tag v1.0

创建的标签指定到了当前分支的HEAD上了。

查看标签信息:git show  tag-name

注意:标签是按照字母排序的,不是按照时间顺序排序的。

为标签加说明,使其易读性提高:git tag –a v0.1 –m ”说明内容”提交地址

用-s为私钥签名加上标签(PGP签名):

$ git tag –s v0.2 ”signed version 0.2 released ” 2b0126c

操作标签

标签推送:git pushv0.1

一次性推送全部标签: gitpush origin --tags

删除标签:git tag –dv0.5

删除的是本地的标签;

如果标签已经推送到远程,先要删除本地标签,然后删除远程标签;

删除远程标签的命令也是push,格式:git push origin :refs/tags/v0.5

5 自定义配置

自定义Git

有时候为了让个别地方更加醒目的显示,加大识别度,提高工作效率,我们会设置一些其他的配置项,比如设置颜色:git config –global color.ui true

忽略特殊文件

有的文件更改后不需要提交,但是系统会一直提示跟踪警告,如果不想让其提示,这时需要建立一个忽略目录,将不需要提交的文件的名称填写进入就可以了,Git就会忽略这些文件了。

忽略文件规则:

?        忽略操作系统自动生成的文件,比如缩略图等;

?        忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;

?        忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

步骤:

需要现在根目录下生成.gitignore,用于存储需要忽略的文件的名称

1.点击版本库try,生成Git Bash命令窗口

创建.gitingore文件输入命令:touch .gitignore

2.      查看哪些未提交文件:git status

三个红色的文件:

其中.example.txt.swp文件是我前面对example.txt文件执行vi命令的时候成的文件,不能提交,但是一直会显示未提交;

.gitignore文件是刚刚生成用于存储忽略文件名的文件;

webConfig.txt文件是我建立的一个用于存储配置内容的文件;

这三个文件都需要忽略掉。

3.      然后用记事本打开.gitignore文件,在里面输入webConfig.txt和 .example.txt.swp,保存,此时再查看状态:

剩下自身没有忽略掉,试着输入本身名称,看能不能忽略掉:

查看状态:

由此可知,.gitignore对自身亦可忽略!

4.      将忽略文件推送到远程,远程仓库就可以获取相应的忽略配置;

特殊情况

第一种情况:

有时候,需要对忽略掉的文件提交:git add webConfig.txt

但是,此时提价不了,系统会提示 Use –f if you really want to add them.

此时,可以通过-f强制添加到Git

$: git add –f webConfig.txt

第二种情况:有时候,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用gitcheck-ignore命令检查

命令:gitcheck-ignore –v webConfig.txt

可以看到Git提示该文件在忽略文件.gitingore的第三行,因此可以凭借此找到该文件修改。

命令别名

给账户或者某个版本库下的命令根据自己的喜好设置别名,用起来更加方便,更加easy;

状态别名:gitconfig –gloabal alias.st  status

切换别名:gitconfig –gloabal alias.co  checkout

提交别名:gitconfig –gloabal alias.ci commit

分支别名:gitconfig –gloabal alias.br branch

撤销别名:gitconfig –gloabal alias.unstage ‘reset HEAD’

提交日志别名:gitconfig –gloabal alias.last  ‘lag-1’  (显示最近一次的提交)

牛逼配置:
git config --global alias.lg "log --color --graph --pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset‘ --abbrev-commit"

注意:配置文件的时候加入gloabal,表示全局变量,对状态电脑上的这个用户所有版本库都起作用,如果不加,则只对当前版本库起作用。

查看当前版本下的配置命令:try仓库下执行:cat .git/config

查看用户的命令配置:在用户根目录下执行:cat .gitconfig

此时可以看到alias 后面的命令配置项。

这两个文件都是隐藏起来的,配置的时候也可以直接修改文件里面的内容,如果修改错误,可以删除配置文件,重新配置;

6 通过Github参与开源项目

Github一般叫做开源协作社区,大家都可以参与开源项目

关注某个名气较高,内容丰富的Github账户,如果想要参与一个项目,为这个项目贡献自己的代码,或者单单查看分析别人的项目,从这个项目代码中获取自己的经验,丰富自己。

那么需要你首先要进入别人的账户下的版本库,fork别人仓库里的代码,克隆到本地,分析修改,add & commit;

然后,通过本地仓库push到远程,如果想要贡献自己的代码,可以pull request  name’s Github repository,如果主人心情好,觉得你的代码有价值,就会采纳合并到项目开分支上,如果心情不好,不想采纳,谁也没得办法!

关注别人的账户:follow一下

关注别人的仓库:start一下

克隆别人的仓库:fork一下

时间: 2024-10-11 09:12:34

Git&Github学习笔记的相关文章

GIT & GitHub 学习笔记

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活, 干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网 速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑 上.既然每个人的电脑都有一个完整的版本库

git/github学习笔记

郑重提示,本文来自这里,如果喜欢,请关注原作者. 1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块 ps:关于git的更详细的介绍于优点在此就不介绍了,教大家怎么用是关键.:) ==============运行环境======== 系统:windows git : Git-1.7.3.1-preview20101002.rar  下载地址:http://d.download.csdn.net/do

git的学习笔记整理

git学习较好的网址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513aefd77a99f4145f0a2c7a7ca057e7570000 开源中国的git站点:http://git.oschina.net/oschina/git-osc/wikis/Home msysgit是Windows版的Git,从http://msysgit.github.

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

Git&amp;GitHub学习日志

Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.作为一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理,而且正变得越来越流行了. 最近我正在学习使用Git工具,因此收集了很多资料,比如经典的Pro Git,不仅有英文原版,还有中文翻译版,我也因此将该中文翻译整理成pdf格式. 我整理的Pro Git中文翻译下载:ProGit-

Github学习笔记-不定时更新

最近在搞一个外包项目,有个非常厉害的师兄带我,他写后端,我负责前端部分,项目合作需要用到github,这也是早晚要接触,记录下项目过程中对github/git使用的学习笔记. 1.在网上看了一些教程之后在自己的github上创建了一个仓库,然后尝试创建分支,push,感觉好像可以了之后,就在项目上建立分支然后push,由于第一次使用不太明白,不小心push到主分支上去了,网上看到的创建分支是git branch branch_name 然后切换到分支git checkout branch_nam

廖雪峰Git教程学习笔记

廖雪峰git简单教程学习笔记 教程地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0001.可以这样设计目录,在d:\reposisoty\ 在这个目录下面有很多的仓库.mkdir learngitcd learngit>>git init          #这样就把learngit 初始化成了一个仓库>>git status        #说明当前仓库的状态并

《Pro Git》学习笔记

1.Git远程模型示意图 Remote:远程仓库 Repository:本地仓库 Index:暂存区 workspace:当前工作区 2.取得Git仓库 2.1 初始化新仓库     git init 2.2 从现有仓库克隆     git clone git://github.com/xxx/xxx.git [dirName] 3.记录每次更新到仓库 3.1 文件状态变化周期 3.2 检查当前文件的状态     git status 3.3 跟踪新文件     git add <fileNam

廖雪峰Git教程学习笔记(一)

作者及其背景:仔姜,大三学生,幼儿园英语水平,熟系Linux文件基本操作(最基础的) 文章内容或许有些疏漏之处还望各位大佬见谅,如果构成侵权或出现其他问题,请联系我邮箱:[email protected],如果需要更全的知识请移步廖老师Git教程 学习内容来源:廖雪峰Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 感谢廖雪峰老师提供的教程 正文开始: Git简介 什