继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Git学习

哈士奇WWW
关注TA
已关注
手记 511
粉丝 71
获赞 400

以下内容根据廖雪峰大神分享Git教程整理,感谢大神

详见:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

 

 

安装:windows版本 https://git-for-windows.github.io 打包好的模拟环境及git: msysgit

 

验证:开始菜单,Git--Git Bash

 

配置: 

命令:git config --global user.name "Your Name"

          git config --global user.email "email@example.com"

说明:git config --global参数表示当前机器所有用户都是使用该配置

 

进入版本库 :cd e:/learngit

使用:

1.创建版本库(仓库):选择合适位置创建空目录,Windows环境要确保路径不包含中文:

进入目标盘符

命令:cd e:/

确认进入,查看文件

命令:ls

创建仓库

命令: mkdir <repo-name>

           cd <repo-name>

           pwd

           /路径/<repo-name>

注:pwd显示当前目录路径

 

2.将空目录变成Git可以管理的仓库

 命令:git init 

将提示:Initialized empty Git repository in /路径/<repo-name>/.git/

.git目录:Git用来跟踪管理版本库,勿动;默认隐藏, ls -ah查看路径

 

3.将文件添加提交到仓库,无提示即为成功

注:文件放入仓库目录,否则Git无法找到

命令:git add  <file>

作用:添加文件到仓库

命令: git commit -m "infomation"     

作用:将文件提交到仓库

注:-m后必须跟随本次提交的说明,否则将无法继续操作!!!!

扩展:

add <file> 可反复使用,添加多个文件

commit可以一次提交很多文件

如:git add file1.java

        git add file2.xml

        git add flie3.png

        ......

git commit -m "add two files"

 

状态

命令:git status 

作用:时刻掌握仓库当期状态

diff信息

命令:git diff

作用:查看difference,以unix通用diff格式显示

 

历史记录

命令:git log

作用:查看提交历史,从最近到最远,可确定回退版本,会进入log界面

 

扩展:git log --pretty=oneline

 --pretty==oneline  单行显示重要信息,包含:commit-id ,commit information

版本号commit id HASH值 以16进制表示

 

版本回退

命令:git reset --hard HEAD^  

作用:回退到上一个版本

注:HEAD指向当前版本 HEAD^上个版本 HEAD^^上两个版本,上100个版本 HEAD~100

 

命令: git reset --hard commit-id    

作用:回退到指定版本:

注:id不需要写全,也不要太短,git会自动查找

 

命令:cat <file>

作用:查看文件

 

命令历史

命令: git reflog

作用:查看命令历史,可用于查看commit-id及HEAD版本, 用于版本回退

 

工作区与暂存区

工作区包含隐藏目录.git ,是Git版本库

创建版本库时,Git默认创建第一个分支master,并包含暂存区stage

git add <file>添加文件,实际上是将文件修改添加到暂存区

git commit <file>提交更改,实际上是把暂存区的所有内容提交到当前分支

Git 跟踪修改,若没有add添加到暂存区,就不会加入到commit

 

命令:git diff HEAD --<file>

作用:查看工作区和版本库里最新版本的区别

 

撤销修改

命令: git checkout -- <file>  

作用:撤销工作区修改,让文件回到最近一次git commit 或git add时的状态,"--"很重要,没有则为切换分支;已添加到缓存区的无法直接撤销,需先重置缓存区,配合git rest使用

 

重置

命令:git reset  

作用:既可以回退版本,也可以把暂存区的修改,非删除的回退到工作区

命令:git reset HEAD <file> 

作用:撤换暂存区的修改unstage,重新放回工作区

 

注:1.直接丢弃工作区,非缓存区的修改checkout -- <file>

2.修改了工作区内容,且添加进缓存区,想丢弃修改,先git reset HEAD <file>或git rest 再git checkout -- <file>

3.工作区修改已提交版本库,恢复只能通过版本回退!

 

 删除文件 rm

命令: git rm <file> 

作用:从版本库删除文件

注:删除后需commit提交,否则工作区与版本库不一致

命令: git checkout -- <file>

作用:工作区删除但未提交,可以用版本库版本替换工作区版本,无论工作区是修改还是删除;若已提交,则无法恢复,除非回退版本

 

 

远程仓库

1.使用免费开放的GitHub

2.搭建Linux服务器

 

GitHub

检查用户主目录下,是否有.ssh目录id_rsa和id_rsa.pub两个文件

1.创建SSH Key 

windows下打开Git Bash

命令:ssh-keygen -t rsa -C "youremail@example.com"

默认值即可,无需设置密码

2登陆GitHub,“Account settings”,“SSH Keys”页:

“Add SSH Key”,任意Title,Key文本框里粘贴id_rsa.pub文件的内容

SSH Key,GitHub需识别出推送的提交确实是本人推送,而非他人冒充。Git支持SSH协议

GitHub允许添加多个key

 

添加远程仓库

1.GitHub: Create a new repo按钮创建一个新的仓库

Repository name填入仓库名repo-name,其他默认,“Create repository

2.关联一个远程库:

命令:git remote add origin git@server-name:path/<repo-name>.git

如:git remote add origin git@github.com:GitHub帐户名/repo-name.git

添加后,远程库的名字就是 origin,此为Git默认名称,可以更改

3.关联后推送master分支所有内容:

命令:git push -u origin <branch-name>

注:-u 关联本地库内分支与远程库内分支 

命令:git push origin branch-name

每次提交本地版本库后,只要有必要,推送最新修改

 

注:第一次使用Git的clone或push命令连接GitHub时,会得到一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.

RSA key fingerprint is xx.xx.xx.xx.xx.

Are you sure you want to continue connecting (yes/no)?

这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。

 

 

 

克隆

 

命令:git clone git@github.com: 路径/<repo-name>.git

作用:从远程库克隆git clone

注:必须知道仓库的地址

git支持多种协议 包括https

通过ssh支持原生git协议速度最快

 

 

分支管理

 

开发分支 dev分支 

命令:git checkout -b <branch-name>

如:git checkout -b dev

作用: 创建并切换分支

相当于:git branch <branch-name>

            git checkout <branch-name>

命令:git branch 

作用: 列出所有分支,当前分支前会标有星号

命令:git checkout <branch-name>

作用: 切换回当前分支

命令:git merge <branch-name>

作用: 合并指定分支到当前分支,直接将当前分支指向指定分支的提交内容

命令:git branch -d <branch-name>

作用: 删除分支  

 

解决冲突

多分支同时修改相同文件,合并时可能会出现冲突提示:Automatic merge failed; fix conflicts and then commit the result. 此时需手动解决冲突,再add ,commit

 

查看分支合并图: 

git log --grahp

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

 

分支管理策略

快速模式合并分支,会丢失分支信息

git merge <branch>

普通模式,禁用Fast forward 模式:

git merge --no-ff -m"infomation" <branch>

日志查看:普通模式下,合并后可以看到曾经做过合并,有历史分支信息;

 

策略:master分支应该是最稳定的,仅用来发布新版本,平时不能操作,在dev分支开发,发布时再合并到master分支

 

 

修改bug issue 分支

 

临时存储工作现场,保存未完成的工作,确保工作区干净,以便切分支完成其他任务

git stash 

 

列出存储

git stash list  

 

恢复工作现场

1.git stash apply 提交恢复, git stash drop删除stash内容

批量删除可以使用git stash clear

2.git stash pop 恢复的同时删除stash内容

 

多次stash

可先 git stash list,然后恢复指定stash 

git stash apply <stash-id>

如:git stash apply stash@{0}

 

开发新功能时 feature分支

强行删除分支:

git branch -D <branch-name>

 

从远程仓库克隆时,Git自动把本地master分支和远程master分支对应,远程仓库默认名称是origin,以创建为准

 

查看远程仓库信息

git remote

显示更详细信息

git remote -v

注:若没有推送权限,将看不到push地址

 

推送分支

 

说明:

master分支是主分支,需要时刻与远程同步

dev 是开发分支,团队所有成员都在上面工作,也需要与远程同步

bug分支 只用于本地修复bug,没必要推送到远程

feature分支是否推送到远程,取决于是否和小伙伴合作开发

克隆远程库默认只可见master分支

 

本地新建的分支如果不推送到远程,对其他人是不可见的。

 

指定本地分支推送到远程库

git push origin <branch-name>

如:dev分支

git push origin dev

注:若推送失败,先用git pull抓取远程的新提交

 

本地创建和 远程库分支 对应的分支,名称最好一致:

远程分支:origin/branch-name

git checkout -b <branch-name> origin/<branch-name>

 

建立本地与远程分支的连接

git branch --set-upstream-to branch-name origin/branch-name

 

抓取分支

git pull

注:建立本地与远程对应分支连接后再拉取,无需任何分支名称。

git push

注:从指定远程库分支抓取最新提交,若有冲突,先手动解决冲突,再push

 

多人协作的工作模式通常是这样:

1.试图用 git push origin bracn-name 推送自己的修改

2.如果推送失败,先用 git pull试图合并

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

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

 

标签管理

tag与commit-id绑定,便于查找

 

git tag

查看所有标签

 

打新标签

1.切换到需要打标签的分支 

        先查看分支信息git branch

        切换指定分支git checkout <branch>

2.git tag <tagname>

 

新标签默认打在HEAD,既最新提交的commit上

指定提交记录打标签

    要先查找历史提交commit id:

    git log --pretty=oneline --abbrev-commit

    再:git tag <tagname> commit-id

 

标签默认按字母排序,不按时间

查看标签信息

git show <tagname>

 

创建带有说明的标签 -a指定标签名,-m指定说明文字

git tag -a <tagname> -m "infomation" commit id

 

用私钥签名标签 -s

git tag -s <tagname> -m "infomation" commit id

 

说明:签名采用PGP,必须先安装gpg(GnuPG),若没找多或没有gpg密钥对,就会报错

gpg: signing failed: secret key not available

error: gpg failed to sign the data

error: unable to sign the tag

如果报错,请参考GnuPG帮助文档配置Key。

git show <tagname> 可以看到GPG签名信息

 

查看所有标签

git tag 

 

删除标签

git tag -d <tagname>

 

将标签推送到远程

git push origin <tagname>

一次性推送全部尚未推送到远程的本地标签

git push origin --tags

 

删除远程标签

1.先删除本地

git tag -d <tagname>

2.从远程删除,push命令

git push origin :refs/tags/<tagname>

3.检查远程删除结果,登录GitHub查看

 

 

使用GitHub

GitHub 可以任意Fork开源仓库

自由拥有Fork后的自己帐号下的仓库的读写权限

自由从自己帐号下clone仓库才能推送修改

克隆:如git clone git@github.com: michaelliao/bookstrap.git

可以推送pull request 给官方仓库贡献代码,官方决定是否接受

 

删除已有的GitHub远程库

git remote rm origin

关联远程库

git remote add origin git@gitee.com:path/<name>.git

 

 

使用码云

国内Git 托管服务 gitee.com

同时关联多个远程库

git的远程库默认名称是origin ,多个远程库需要不同的名称标识

 

已关联了GitHub远程库的情况下:

1.先删除已关联的名为origin的远程库

git remote rm origin

2.关联GitHub远程库

git remote add github git@github.com:路径/<name>.git

3.关联码云远程库

git remote add gitee git@gitee.com:路径/<name>.git

 

此时查看远程库信息,可以看到两个远程库

git remote -v

推送到GitHub

git push github master

推送到码云

git push gitee master

 

 

自定义Git

 

让Git显示颜色

git config --global color.ui true

 

忽略特殊文件

1.编写.gitignore

在Git工作区根目录创建特殊的.gitignore文件,添加要忽略的文件名

 

2..gitignore 文件要放入版本库,并且可以对.gitignore做版本管理

检验.gitignore的标准是git status命令是不是说working directory clean

 

检查规则是否有误,是否忽略了指定具体文件:

git check-ignore -v <file>

 

添加被.gitignore忽略的文件到版本库,强制性

git add -f <file>  

忽略文件的原则是:

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

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

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

 

配置命令别名

git config --global alias.

如 :st表示status git config --global alias.st status   

    co表示checkout

    ci 表示commit

    br 表示branch

撤销更改别名配置:unstage

原命令:git reset HEAD file

git config --global alias.unstage 'rest HEAD'

更改后:git unstage <file>

显示最后一次提交的信息 git last

git config --global alias.last 'log -1'

更改后:git last

配置log

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"

更改后:git lg

 

--global针对当前用户起作用,不加只对当前仓库起作用

每个仓库的配置文件位置:.git/config

查看:cat .git/config

配置的别名在[alias]后

 

当前用户的Git配置文件在用户主目录下的一个隐藏文件.gitconfig

查看:cat .gitconfig

 

搭建Git服务器

 

使用Linux机器。推荐Ubuntu 或Debian

假设有sudo权限的用户帐号

1.安装git sudo apt-get install git

2.创建git用户,运行git服务 sudo adduser git

3.创建证书登录

收集所有需要登录的用户的公钥,.id_ras.pub文件,导入到/home/git/.ssh/authorized_keys文件,一行一个

4.初始化Git仓库,选定一个目录作为Git仓库,假设为/srv/sample.git

在/srv目录下输入 sudo git init --bare sample.git

会创建一个裸仓库,没有工作区,通常以.git结尾,将owner改为git

sudo chown -R git:git sample.git

5禁用shell登录,出于安全考虑,git用户不允许登录shell,通过编辑/ect/passwd文件完成

git:x:1001:1001:,,,:/home/git:/bin/bash

改为

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

 

git用户可以正常通过ssh使用git,因为我们为git用户指定的git-shell每次一登录就自动退出

 

克隆远程仓库

git clone git@server:/srv/sample.git

·         搭建Git服务器非常简单,通常10分钟即可完成;

·         要方便管理公钥,用Gitosis;

·         要像SVN那样变态地控制权限,用Gitolite。

原文链接:http://www.apkbus.com/blog-35555-72650.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP