JavaWeb(十七)--Git基本教程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a592381841/article/details/85270437

Git基础教程

概论

存储仓库
    一个仓库,或者说是一个git项目,其中包括了项目及其相关文件和文件夹的集合。

工作流程图

 

Git工作区、暂存区和版本库

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git基本操作

      创建仓库  git init

       使用命令创建一个仓库(初始化)

       语法:

              git init   在当前目录创建git仓库

              git init 文件名    在当前目录创建新文件夹。并且该文件夹被初始化为git仓库

查看当前工作区和暂存区版本库存在的区别 git status

git status

 

文件从工作区到暂存区

将文件添加入缓存里 git add 文件名

       语法: git add 文件名

              例子:git add ad.php

      

git rm 删除文件

       语法:

              git rm  文件名

              强制删除 添加 -f参数

git mv 用于移动 重命名文件 目录 软连接

       git mv 源文件  新文件

撤销修改

仅在工作区修改了  使用  git checkout -- 文件名

 

已提交到缓存区的 使用

第一步、 git reset HEAD 文件名

第二步:git checkout -- 文件名

 

若已经提交版本  请使用版本回滚   git reset HEAD^  (详见版本回滚)

 

将暂存区提交到版本库提交 git commit

git add 将快照转入 缓存区

git commit 将缓存区 转入 仓库中

 -m 后接字符串,表示此处提交的说明

 -a  不需要add rm直接一步到位

 

git分支

常见操作

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

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

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

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

关于合并冲突文件

案例:

1、master创建一个文件

2、创建一个分支并切换,修改该文件,并提交到仓库

3、切换回master,并修改文件并提交到仓库

此时其分支图是这样的

4、当master执行git merge 分支名。将其合并的时候,文件会出现如图。此时需要自行修改

git版本回滚

版本退回 git reset HEAD

git reset HEAD^ 上一个

git reset HEAD~12 上12个

 

git查看提交历史git log

       git log

       参数 --oneline  简洁版

               --graph 查看历史中什么时候出现分支合并。

               --reverse  逆向显示所有日志

git查看以查看所有分支的所有操作记录git reflog

git feflog

git标签

创建标签

       git tag -a 标签名 -m ‘备注’  指定标签信息;

       git tag -s 标签名 -m ‘备注’   PGP签名标签命令

 

查看所有标签

       git tag

 

 

git远程仓库

关联一个远程库

为了便于管理,Git要求每个远程主机都必须指定一个主机名

添加远程库 git remote add [shortname] [url]

删除远程库 git remote remove name

查看远程库  git remote

重命名远程库 git remote rename 旧名字 新名字

查看指定主机详情 git remote show 主机名

 

 

使用命令添加 git remote add origin git@server-name:path/repo-name.git

删除:   git remote remove origin

拷贝仓库到本地 clone

从远程主机克隆一个版本库

 

语法:  

git clone <版本库的网址>

git clone <版本库的网址> <本地目录名>

              例子: git clone [email protected]:demo/demo.git

 

git rebase

语法:

git rebase [<upsteram>] [<branch>]

rebase操作可以把本地未push的分叉提交历史整理成直线;

rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

git fetch

A: 一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。

B: git fetch对你本地的开发代码没有影响。

默认情况下,git fetch取回所有分支(branch)的更新。

如果只想取回特定分支的更新,可以指定分支名。

         $ git fetch <远程主机名> <分支名>

                 例子: git fetch origin master

取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。

比如origin主机的master,就要用origin/master读取。

git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。

 

git pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

(1)指定分支git pull <远程主机名>   <远程分支名>  :  <本地分支名>
(2)不指定本地分支 直接用当前分支   git pull   <远程主机名>  <远程分支名>
 (3)若当前分支与远程主机某分支有追踪关系。    则指定本地分支即可将两者合并到本地
        git pull <远程主机名>
4)如果当前分支只有一个追踪分支,连远程主机名都可以省略。
        git pull
git pull 等于先做git fetch,再做git merge。
 

 

如果合并需要采用rebase模式,可以使用--rebase选项。

$ git pull --rebase <远程主机名><远程分支名>:<本地分支名>

 

注意:如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。

但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。

$ git pull -p
# 等同于下面的命令
$ git fetch --prune origin 
$ git fetch -p

追踪关系

Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。

建立追踪方式

    第一种:自动的(git clone)

git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动"追踪"origin/master分支。

第二种:手动的

Git也允许手动建立追踪关系。

    git branch --set-upstream 本地分支  远程分支

  例子git branch --set-upstream master origin/next

         上面命令指定master分支追踪origin/next分支。

 

git push

git push命令用于将本地分支的更新,推送到远程主机。它的格式

(1)完整格式  $ git push <远程主机名><本地分支名>:<远程分支名>
(2)若本地分支推送与之存在"追踪关系"的远程分支(通常两者同名)如果该远程分支不存在,则会被新建。

$ git push <远程主机名> <本地分支名>

(3)省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。$ git push <远程主机名>:<远程分支名>

(4) 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

git push <远程主机名>

(5)如果当前分支只有一个追踪分支,那么主机名都可以省略。

        $ git push
 
 

若当前分支与多个主机存在追踪关系,

则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push

           

simple方式和matching方式

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。

还有一种matching方式,会推送所有有对应的远程分支的本地分支

默认采用simple方式。

如果要修改这个设置,可以采用git config命令。

$ git config --global push.default matching#  或者$ git config --global push.default simple
 

--all参数

还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用--all选项。

$ git push --all origin

上面命令表示,将所有本地分支都推送到origin主机。

 

 

--force参数

如果远程主机的版本比本地版本更新,推送时Git会报错。

要求先在本地做git pull合并差异,然后再推送到远程主机。

这时,如果你一定要推送,可以使用--force选项。

--tags参数

最后,git push不会推送标签(tag),除非使用--tags选项。

$ git push origin --tags

 

Github操作

添加公钥

本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,

所以,需要一点设置:

1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开ShellWindows下打开Git Bash),创建SSH Key

        $ ssh-keygen -t rsa -C "[email protected]"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

2步:登陆GitHub,打开“Account settings”“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

 

“Add Key”,你就应该看到已经添加的Key

 

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

修改开源项目

  • GitHub上,可以任意Fork开源仓库;
  • 自己拥有Fork后的仓库的读写权限;
  • 可以推送pull request给官方仓库来贡献代码

 

如何参与一个开源项目呢?

比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目主页https://github.com/twbs/bootstrap,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone

git clone git@github.com:michaelliao/bootstrap.git

一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址[email protected]:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。

Bootstrap的官方仓库twbs/bootstrap、你在GitHub上克隆的仓库my/bootstrap,以及你自己克隆到本地电脑的仓库,他们的关系就像下图显示的那样:

 

如果你想修复bootstrap的一个bug,或者新增一个功能,立刻就可以开始干活,干完后,往自己的仓库推送。

如果你希望bootstrap的官方库能接受你的修改,你就可以在GitHub上发起一个pull request。当然,对方是否接受你的pull request就不一定了。

 

git服务器搭建

 

 

猜你喜欢

转载自blog.csdn.net/a592381841/article/details/85270437