git学习笔记(膜拜廖大神的网站而成)

git 教程(廖雪峰)笔记

  1. 安装好git for windows,后,打开git-bash,这是一切的开始。
  2. 新建、初始化仓库并添加提交文本文件到已有仓库:
  1. 新建仓库:在git-bash里输入

 

mkdir 仓库名

cd 仓库名

pwd

mkdir 新建文件夹/目录;cd进入某文件夹;pwd 显示当前目录。

至此,创建了新的仓库并命名了仓库,进入到了该仓库并显示当前目录。

  1. 使用该仓库前应该初始化仓库(reponsitory)用:

 

git init

写了文本文件之后(要放在仓库名目录或者子目录下,否则git找不到),将它添加到仓库中,分两步:

 

 

git add txt文件

git commit -m "评论"

 

【1】git add (这个不是最终的提交,但是它可以执行多次再最终提交,相当于保存最新进度,存档) ,注意:filename必须是以.txt或者其他文件类型结尾,如readme.txt。

【2】真正的提交是:git commit -m ""。

在实际工作中,每一次小修改就git add一次,这样关掉程序后,暂存区还可以有你修改后的文件;而确定好、文件不会再有大变动的时候,就git commit -m"评论此次文件版本的特性"  一下,相当于发布了这个文件的一次大变动过后的版本。

注意:

  1. 修改并查看已提交在仓库的文本文件:

先修改文件。

然后:

 

git status

git diff

在修改该文本文件之后,输入上述两行操作,再然后重新add和commit两步提交就可以了。

git status 用于查看当前分支状态(显示上次提交之后的活动,如有没有文件未提交、有没有文件在执行此查看命令之前被修改过、添加过、删除过。)(status状态),git status 可以用git commit替代;

git diff用于仔细查看修改的地方。(diff即difference)。

 

总的来说,修改文件就是下面四步:

 

修改文件

git status //查看该分支

git diff

git add 文件

git commit -m"我干了些啥。。。"

 

  1. 时光穿梭机(回退整个版本):

 

 

git reset --hard 或者HEAD^ //回退的决定性操作

下面是回退之前的查询操作:

git log  //显示历史版本

git reflog //显示历史操作

要想修改文件,直接修改;

然后执行git reset --hard 提交的id,或者head^,它表示是一个版本,head表示当前版本(不一定是最新的,你可能回退过),head^^表示是上上个版本,...head~100表示上一百个版本。

可是commit_id怎么找?用git log可以查看之前所有提交版本历史不能包括回退之后的版本,显示的版本会减少,相等于回到过去),从而知道之前某个版本的id。

用git reflog可以查看所有提交命令历史,可以回退到任一个版本(就是看着有点乱,但是显示了所有的历史操作,相当于可以回到某一个过去也可以去到自己所在的未来,当然,比自己所在还远的未来是不存在的。)

注:

 

cat 文本文件名(包括后缀.txt)

这个命令可以显示当前文本文件的内容。

  1. 暂存区(stage):

首先,git的目录一打开就是工作区,里面主要有重要的文件,和一个隐藏的目录(一个叫.git的文件夹),它就是版本库,记录着每一个文件的每一次版本修改;在版本库里有master分支和指向分支的head指针,以及最重要的暂存区。

master就是一个类似于树的结构(里面保存了每一次的工作区所有文件,也就是每一次版本),指针用于寻找它;

而暂存区,就是git add之后,被修改过的文件就被提交到了暂存区,git commit就是将暂存区里的文件全部提交到了master分支里。

“暂存区就像购物车,没到付款的时候你都不确定购物车里的东西全部都是要的。。。每拿一件商品就付一次款。。。那才麻烦大了”。

注意:

工作区就是可以任意修改文件的地方;

暂存区是待整合、待发布版本的聚合地;

master就是不可修改的历史版本(包括最新版本)。

  1. 小型时光机(回退总结):

(1)

 

git reset HEAD 可以将暂存区的该文件撤销到工作区;

git checkout --可以将工作区该文件的修改撤销。

以上就分别是git add和直接修改工作区文件的逆向操作。

(2)

另外,git commit没有回退操作,只能回退版本(git reset head^或commit_id,将所有flies回退),但是版本库里会有strack(痕迹)

(3)

一旦提交到远程库,由于分布式(GIT)的特性,将不可逆转

  1. 删除文件:

 

ls可以查看所有文件的名字,从而得知文件是否被删

 

删除文件有三种方法:

(1)直接物理删除哈哈,这时Git是知道文件被删除了的,

只是版本库里的版本和工作区的版本不同步而已,

(想要撤销删除,直接git checkout -m 即可撤销,)

若想真正删除当前版本的该文件,使用

git rm

git commit -m "delete the filename.txt",

该版本就不存在该文件了。

(2)rm ,相当于物理直接删除,

(撤销操作一样)

所以接下来也是

git rm

git commit -m "delete the filename.txt"

(3)git rm

git commit -m "delete the filename.txt"

 

注意:(1)只要文件被提交(commit)过,就不怕找不到,只要返回到还有那个文件的版本即可;

(2)“【1.如果你用的rm删除文件,那就相当于只删除了工作区的文件,如果想要恢复,直接用git checkout -- 就可以

 【2.如果你用的是git rm删除文件,那就相当于不仅删除了文件,而且还将文件删除这一操作添加到了暂存区(Git保存管理的是修改而不是文件),需要先git reset HEAD ,然后再git checkout --

  【3.如果你想彻底把版本库的这一版本的文件彻底删除掉,先git rm,再git commit 就ok了。”

 

  1. 远程仓库(先有本地库,后有远程库的时候,如何关联远程库。):

 

 

$ cd ~/.ssh

$ pwd 就知道主目录的路径了

Git虽然是分布式系统,但是它必须要有一个Git服务器24小时做中转站,Github则提供了这样一个云服务器(代码托管平台,也就是那个中转站)。

  1. 使用本地git-bash来进行对应于本地仓库的邮箱注册一个SHH钥匙($ ssh-keygen -t rsa -C "邮箱地址"  ,会生成钥匙,操作见 https://www.liaoxuefeng.com/wiki/896043488029600/896954117292416 ),这样你就有了SHH公钥(在C:\Users\31728\.ssh文件夹的id_rsa.pub里),
  2. 然后在github等云服务器上添加SHH公钥(Add SHH Key),
  3. 最后用git-bash同步仓库(

$ git remote add origin git@中转站的网址[这里是github.com]:用户名[或者到达该仓库的路径]/仓库名.git

如:$ git remote add origin [email protected]:dayixinsheng/learngit.git  )

即可,其他人可以读你的仓库代码但是不能写(没有公钥)。

(remote add origin git就是将本地仓库同步到远程仓库之意。)

现在,只要本地仓库做了更改,就可以用:

 

 

$ git push -u origin master(第一次使用,origin是远程的意思)

$ git push origin master(后续使用)

 

同步分支(版本)到云服务器上的对于仓库了!它可以做备份,也可以同别人一起协作。

 

总结:

 

 

git ssh-keygen -t rsa -C "[email protected]"//本地注册仓库邮箱,获取钥匙

//github上建立仓库,取个仓库名(两个仓库名可以不一样),添加SHH公钥

/*------------------------------以上是建立连接-------------------------------------*/

git remote add origin [email protected]:dayixinsheng:learngit.git//本地仓库同步到云端

git push -u origin master //首次同步分支

...//本地修改。。。

git push origin master //同步分支

 

  1. 远程仓库(建立一个远程仓库,然后本地克隆):

先远程建立一个仓库,然后本地输入:

 

git clone [email protected]:用户名/仓库名.git

之后cd 仓库名;进入此仓库后就可以对仓库一系列操作了。

(也可以用http协议,但是速度慢,还是用原生的ssh协议速度快。)

  1. 分支管理:

一个master分支显然不够用,多人协作都往一个分支上提交又肯定非常混乱,所以可以建立多个平行宇宙分支,做完后再合并。(注意,所有分支都是以主分支为模板。)

 

 

git branch //查看分支,带*表示当前分支

git branch   //创建分支

git checkout //切换分支

git checkout -b //创建并切换分支

git merge //合并某分支到当前分支

git branch -d //删除合并后的分支

 

  1. 分支冲突:

如果各个分支对同一个文件都进行了修改,合并分支的时候就会又冲突,这时再修改冲突的文件即可。

 

 

$ git log --graph --pretty=oneline --abbrev-commit//用于查看所有分支

 

注:vi 文件名 可以在命令行里编辑文件,若没有该文件会新建txt,具体操作如下:(https://blog.csdn.net/wangzherongrao/article/details/80785016

 

  1. 有历史痕迹可循的分支合并:

 

 

git merge --no-ff -m "关于此次分支合并的一些评论" //将branch合并到当前分支

//这样,使用git log 就可以查看分支过

 

  1. 临时bug分支:

创建分支并在该分支下工作 只能每次一个进行,必须add并commit或者stash之后才能进行对另外分支操作。

 

 

git checkout -b //创建并转到分支

//在这分支上做了一些文件修改...

git add

//然后这时不想commit,因为每一次commit(提交)都是有原因的,它还要评论呢~所以不是随便就commit的,这时就可以:

git stash

//然后创建新的别的分支、该干嘛干嘛,干完之后就:

git checkout

git status list//查看该分支下的stash,若有多个stash则为数组形式

git stash pop //全部stash恢复到分支下并删除stash区的内容

git stash apply (stash[i])//或者将;第i条stash恢复到该分支

git stash drop//删除stash内容

  1. feature分支:

这个分支是用来专门实现某个功能而创建的分支,本来和bug分支类似的(创建、修改、添加并提交该分支下的文件--至此文件已备份不会再丢失、合并到head指向的分支、删除),但是提交之后如果还没合并就被告知要取消该功能的开发,即取消该分支的所有的代码,于是就:

 

git branch -D //d表示删除已合并的分支

 

  1. 多人如何用git协作:

首先,要对应好分支:

 

git remote -v//查看远程仓库的详细信息,以便push和pull

git checkout -b origin///在远程创建分支并与本地分支同步,两个分支最好同名

 

//add,commit...

git push origin master_name//表示将当前(head)本地分支推送到远程(origin)仓库的master分支上

git pull //抓取当前远程分支

vi 文件名

//然后修改(本地合并冲突)。。。再push

 

自己在本地修改好分支,就push到远程仓库对应分支,若有冲突(远程的分支比自己当初复制到本地的版本更加新)导致无法推送,就pull 将远程的抓取下来,然后本地解决冲突,再push推送即可。

注意:push就是更新远程库;pull就是更新本地库。

总之就是:push-pull-解决冲突-push.

  1. rebase:略
  2. 标签(tag):

一个tag与一个commit_id捆绑到一起,commit_id不好记也不好找(一大推乱七八糟的数字);而tag就可以是一些有意义的数字,如V1.2。代号。

  1. 创建标签:

(1)先转到要打标签的分支为当前分支,然后git tag tag_name(代号)即可(默认打在当前分支的最新提交,即与其挂钩);

(2)使用git tag可以查看所有标签,git show tag_name可以查看此标签的详细信息(标签不是按照时间顺序而是字母数字顺序);

(3)使用git log --pretty=online --abbrev commit查看历史的提交id。

(4)要对历史某一次提交打上标签,可以git tag tag_name commit_id,如:git tag v0.9 f52c633.

(5)添加标签说明:

 

 

git tah -a tag_name -m "sth to say " commit_id

 

  1. 管理标签:

将本地标签与云端同步:

 

 

git push origin

git push origin --tags//推送本地全部未推送的标签

 

     删除标签:

 

 

git tag -d //仅仅删除本地标签

git push origin :refs/tags///删除远程仓库的某个标签

注意:不要git push origin --delete 这样会把与标签挂钩的整个远程分支都给删了的(虽然版本库有保留)。

  1. 学习github:

github desktop就是相当于git-bash高级版,只是它不用输入如此多的linux指令,是图形化操作,与github.com有着天壤之别!

  1. 使用码云:

这个跟github大同小异,略。

就是同时关联两个库:

 

git remote add origin git @对应的云代码托管网址(github.com或者gitee.com):用户名/仓库名

git checkout -b origin///然后创建远程分支并转到该分支使mastername对应于远程的master name分支

 

git remote -v//可以查看远程仓库详细情况

         以上,将origin改成不同的单词(如:github和gitee)就可以同时关联两个库了,只是在推送的时候要写好对应的远程仓库名。

  1. 自定义使用git:

自己可以更改一些设置,比如字体和颜色。略。

  1. 忽略特殊文件:

git有一个专门用于检测忽略名单的文件叫.gitignore ,只要在里面写入规则,git就会按照规则过略掉相关文件。(规则类似于sql检索规则,有通配符等)

如:

如果发现有个不需要被i过滤的文件被过滤了,可以输入一下语句查看是哪一行规则过滤了该文件:

 

 

git check-ignore -v 文件名(需要带后缀名,如.class)

 

  1. 配置别名:

有时觉得命令麻烦太长,就可以用

      alias指令。

 

git config --global alias.简称 要改的繁称

//如:

git config --global alias.st status //将该用户下所有仓库的staus简写成st,global是全局之意,如果不加就只对当前仓库起作用

 

     对当前仓库的配置都放在git的配置文件.git/.config目录下。不需要该简写时,只需要在[alias]后面删除对应的简写即可。

     而如果是对用户的配置:

    

  1. 完结撒花~

 

 

你可能感兴趣的:(git学习笔记(膜拜廖大神的网站而成))