git命令使用教程

---
一丶创建版本库二、把文件放入版本库三、时光机穿梭
四、版本回退五、工作区和暂存区六、管理修改
七、撤销修改八、删除操作九、远程仓库
十、添加远程库十一、从远程库克隆十二、创建与合并分支
十三、解决冲突十四、分支管理策略十五、bug分支
十六、feature 分支(强行删除)十七、多人协作十八、标签管理
十九、创建标签二十、操作标签二十一、使用GitHub
二十二、使用码云二十三、自定义Git二十四、忽略特殊文件
二十五、配置别名二十六、搭建Git服务器-

代码规范图

配置账号

1)git --version 查看git 版本
2)git 可以查看是否安装git ,如果安装会显示git 一些操作命令
3)安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
设置用户信息

ssh配置

1.git config --global --list 验证邮箱与GitHub注册时输入的是否一致

2.通过上面两个命令设置用户信息

3.ssh-keygen -t rsa -C "your email",一路确定生成秘钥。会在/Users/windows用户名/.ssh/id_rsa.pub 公钥复制到 github->setting->SSH and GPG keys ->new SSH key

4.添加完成后测试:ssh -T git@github.com

5.  git push -u 远程ssh地址 master

一丶创建版本库

mkdir learngit
cd learngit 
git init  初始化版本仓库
ls -ah  查看当前目录初始化时,生成的隐藏文件
git 里面使用的是纯文本方式编写的文件,不是二进制文件(word也是二进制)。最好utf-8统一格式。

二、把文件放入版本库

1)touch readme.txt   创建一个文件
2)vim readme.txt   编辑文件,里面输入一些内容, 保存退出
3)cat readme.txt 无需进入文件,在外面直接查看文件内的内容
4)git add readme.txt   应该是:添加文件到暂存区    提交到占存区之后或者工作区修改,直接切换分支会报错
方法a.commit提交b.status 保存当前情况到站(快照)
5) git commit -m"wrote a readme.txt" 把文件提交到仓库         -m后面输入的是本次提交的说明
解释:
   为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件。

三、时光机穿梭

1) vim readme.txt   修改其中的内容,保存退出
2) git status 查看仓库当前的状态   文件被修改过,还没有提交等等
3)git diff 查看修改的内容对比,增加,减少情况显示
4)git add readme.txt 提交修改到暂存区
5)git status  显示:将要被提交的修改包括readme.txt,下一步,就可以放心地提交了
6)git commit -m "add distributed"
7)git status 显示:无文件需要提交,工作区干净

四、版本回退

1)重复部奏,修改文件,提交
2)git log  查看每次修改的历史记录
3)git log --pretty=oneline  查看每次版本的commit id (版本号),和提示信息 
4)git 可视化工具查看git历史, 就可以更清楚地看到提交历史的时间线.
5)git reset --hard HEAD^ 回退到上一个版本,HEAD^^回退到上上个版本,HEAD~100,往上100个版本
6)git reset --hard 3628164 回到过去之后,可以回到未来 数字为版本号
7)git reflog 回退了版本之后,git log最新的版本已经看不到了,使用此命令,可以查看所有到版本号

五、工作区和暂存区

1)电脑里能看到的目录,比如我的learngit文件夹就是一个工作区
2)工作区有一个隐藏的目录.git,这个不算工作区,而是git的版本库
3)版本库里面有很多东西,最重要的为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
4)git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支

六、管理修改

1)vim readme.txt 第一次修改readme.txt内容
2)git add readme.txt 提交第一次修改到暂存区
3)vim readme.txt 第二次修改readme.txt内容
4)git commit -m "提示信息"
5)git status 查看状态,发现第二次修改没提交
6)git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
结论:每次修改,如果不add到暂存区,那就不会加入到commit中

七、撤销修改

1)情景:修改的内容,在工作区,尚未提交到暂存区
   a.git checkout -- readme.txt 丢弃工作区的修改   (在修改文件之后,git status ,会提示该命令)
   两种状态:
   ***一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
   ***一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
   ------总之,就是让这个文件回到最近一次git commit或git add时的状态。
   注意:git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
2)情景:修改内容之后,git add 提交到了暂存区
   a.git reset HEAD readme.txt  把暂存区的修改撤销掉(unstage),重新放回工作区  
   b.当我们用HEAD时,表示最新的版本
   c.git checkout -- readme.txt 丢弃工作区的修改
小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库

八、删除操作(也是一个修改操作)

1.touch test.txt
2.git add test.txt
3.git commit -m "add test.txt"
4.rm -f test.txt 
   ****以上为删除一个本地文件
   -----第一种情况,确定要从版本库中删除该文件,git rm,并且git commit
5.git rm test.txt  
6.git commit -m "remove test.txt"
   -----第二种情况,删错了(属于修改操作的一种)
7.git checkout -- test.txt  用版本库里的版本替换工作区的版本

九、远程仓库

1.windows 下打开Git Bash  || linux 打开Shell
2.输入命令  
3.然后一路回车,使用默认值即可
4.在用户主目录root里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人(隐藏目录)
5.登陆GitHub,打开“Account settings”,“SSH Keys”页面
6.点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容.
7.GitHub允许你添加多个Key。只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
8.GitHub上免费托管的Git仓库,任何人都可以看到(但只有自己才能改)
9.如果不想别人看见
  a.交费私有
  b.自己搭建git服务器

十、添加远程库

1.登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库
2.在Repository name填入learngit,其他保持默认设置,创建一个git仓库
3.可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
4.git remote add origin git@github.com:zzt-up/learngit.git (此时选择的是ssh的方式还有https的方式),需要到.git目录下执行
5.git push -u origin master  本地库的所有内容推送到远程库上,把当前分支master推送到远程
6.由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
7.git push origin master  本地作了提交,就可以通过命令把本地master分支的最新修改推送至GitHub

十一、从远程库克隆

1.登录gitHub,创建一个新的仓库,名字叫gitskills.
2.下面单选框,勾选最后一个使用自述文件初始化此存储库
3.本地建一个目录,进入目录
4.git clone git@github.com:zzt-up/gitskills.git
5.cd gitskills,查看此目录下有初始化的文件README.md
6.Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

十二、创建与合并分支

1.创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作

1.git checkout -b dev    -b 参数表示,创建并切换相当于 git branch dev + git checkout dev
2.git branch 查看当前分支  当前分支前有个*
3.vim readme.txt 对readme.txt修改  从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变
4.git add readme.txt 添加
5.git commit -m "branch test" 提交
6.git checkout master 切回master 分支
7.cat readme.txt 发现刚才的修改不见了
8.git merge dev 把dev分支的成果合并到当前分支master上(快进模式)
9.cat readme.txt 查看内容
10.git branch -d dev 合并完成后删除dev分支
11.git branch 查看分支

十三、解决冲突

1.git checkout -b feature1
2.vim readme.txt 增加一行
3.git add readme.txt
4.git commit -m "AND simple"
5.git checkout master
6.vim readme.txt 增加一行
7.git add readme.txt
8.git commit -m "& simple" 
9.git merge feature1 快速合并,此时发生冲突
10.修改文件,解决冲突
11.git add readme.txt
12.git commit -m "conflict fixed"
13.git log --graph --pretty=oneline --abbrev-commit 看到分支合并情况
14.git branch -d feature1 删除feature1分支

十四、分支管理策略

1.合并时,git会用fast forward(快进)模式,但是这种模式下,删除分支后,会丢掉分支信息
2.如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
3.git merge --no-ff -m "merge with no-ff" dev       --no-ff参数,表示禁用Fast forward
4.合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
5.合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

十五、bug分支

1.在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交
2.并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
3.git stash  现在用 git status  查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug
4.git checkout master  确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支
5.git checkout -b issue-101
6.vi readme.txt修改文件
7.git add readme.txt
8.git commit - m "fix bug 101"
9.git checkout master 修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
10.git merge --no-ff -m "merged bug fix 101" issue-101
11.git branch -d issue-101
12.git checkout dev bug修复只花了5分钟!现在,是时候接着回到dev分支干活了
13.git status 工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看
14.git stash list 工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法
   a.用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
   b.用git stash pop,恢复的同时把stash内容也删了
15.git stash pop
16.git stash list 就看不到任何stash内容了
17.你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
   git stash apply stash@{0}

十六、feature 分支(强行删除)

1.git checkout -b feature-vulcan  接到了一个新任务:开发代号为Vulcan的新功能
2.修改vulcan.py
3.git add velcan.py
4.git commit -m "add feature vulcan"
5.git checkout dev 切回dev,准备合并
6.git branch -d feature-vulcan  此时新开发的功能需要取消
7.git branch -d feature-vulcan  销毁失败。Git友情提醒,feature-vulcan分支还没有被合并,如果删除,将丢失掉修改
8.git branch -D feature-vulcan 如果删除,将丢失掉修改,如果要强行删除,需要使用命令git branch -D feature-vulcan。

十七、多人协作

1.当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。要查看远程库的信息,用git remote 或者  git remote -v显示更详细的信息
2.上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
3.推送分支
   a.git push origin master 推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
   b.git push origin dev 如果要推送到其它的分支,如dev
   c.并不是一定要把本地分支往远程推送
4.抓取分支

十八、标签管理

1.发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本
2.tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起

十九、创建标签

1.git branch 查看所有分支
2.git checkout master  切换到主分支
3.git tag v1.0  打一个标签v1.0
4.git tag 查看所有标签
5.默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?
   方法是找到历史提交的commit id,然后打上就可以了
6.git log --pretty=oneline --abbrev-commit
7.git tag v0.9 6224937 最后面一个为commit号
8.git tag
9.git show v0.9  标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息
10.git tag -a v0.1 -m "version 0.1 released" 3628164 创建带有说明的标签,用-a指定标签名,-m指定说明文字
11.git show <tagname> 可以看到说明文字
12.git tag -s v0.2 -m "signed version 0.2 released" fec145a 通过-s 用私钥签名一个标签
13.签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错
14.git show <tagname> 可以看到PGP签名信息  用PGP签名的标签是不可伪造的,因为可以验证PGP签名

二十、操作标签

1.git tag -d v0.1 如果标签打错了,可以删除 (本地)
2.git push origin <tagname> 推送某个标签到远程
3.git push origin --tags 一次性推送全部尚未推送到远程的本地标签
4.git tag -d v0.9 如果标签推送到了远程,要删除比没推送时要麻烦一些,先本地删除
5.git push origin :refs/tags/v0.9 从远程删除,删除命令也是push但是有一定格式
6.要看看是否真的从远程库删除了标签,可以登陆GitHub查看。

二十一、使用GitHub

1.如何参与一个开源项目呢?
   a.比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目主页https://github.com/twbs/bootstrap,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone
   b.git clone git@github.com:my/bootstrap.git
   c.一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址git@github.com:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改
   d.如果你希望bootstrap的官方库能接受你的修改,你就可以在GitHub上发起一个pull request。当然,对方是否接受你的pull request就不一定了

二十二、使用码云

二十三、自定义Git

1.git config --global color.ui true  让Git显示颜色,会让命令输出看起来更醒目

二十四、忽略特殊文件

1.有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...。
2.在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
3.不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
4.忽略文件的原则是:
   忽略操作系统自动生成的文件,比如缩略图等;
   忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件    就没必要放进版本库,比如Java编译产生的.class文件;
   忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件
​
5..gitignore,示例内容如下:
​
 Windows:
​
Thumbs.db
ehthumbs.db
Desktop.ini
​
Python:
​
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
​
db.ini
deploy_key_rsa
​
#### My configurations:
​
6.最后一步就是把.gitignore也提交到Git,当然检验.gitignore的标准是git status命令是不是说working directory clean
7.在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了
8.git add App.class 你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了
9.git add -f App.class如果你确定要添加该文件,可以用-f强制添加到Git
10.git check-ignore -v App.class 你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查
11..gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!

二十五、配置别名

1.git config --global alias.st status
2.git config --global alias.co checkout
3.git config --global alias.ci commit
4.git config --global alias.br branch
5.--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用
6.git config --global alias. unstage 'reset HEAD' 
7.git unstage test.py  实际上执行的是 git reset HEAD test.py 可以把暂存区的修改撤销掉(unstage),重新放回工作区
8.配置一个git last ,让其显示最后一次提交的信息
a.git config --global alias.last 'log -1'
b.git last  现在使用git last 就能显示最近一次的提交
9.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"
10.git lg 就能看到带有一定格式的日志信息
11.配置文件
a.配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中:
b.别名就在[alias]后面,要删除别名,直接把对应的行删掉即可
c.当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
d.配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置

二十六、搭建Git服务器

搭建Git服务器需要准备一台运行Linux的机器,通过几条简单的apt命令就可以完成安装。
假设你已经有sudo权限的用户账号,下面,正式开始安装
1.sudo apt -get install git 安装git
2.sudo adduser git 创建一个git用户,用来运行git 服务
3.创建证书登录 
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
4.初始化Git仓库
a.先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
sudo git init --bare sample.git
b.sudo chown -R git:git sample.git
因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git
5.禁用shell登录
6.克隆远程仓库
git clone git@server:/srv/sample.git 可以通过git clone命令克隆远程仓库了,在各自的电脑上运行
7.小结
要方便管理公钥,用Gitosis;
要像SVN那样变态地控制权限,用Gitolit
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值