笔记-git-基础使用

笔记-git-基础使用

 

1.      git相关概念

  1. 工作区(Working Directory):

就是在电脑里能看到的目录,init后的当前目录就是一个工作区;

  1. 版本库(Repository):

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD;

  1. HEAD表示当前版本,HEAD^表示前一个版本,HEAD^^表示前前版本;

 

2.      GIT客户端

2.1.    客户端配置管理

config 配置有system,global(用户级别) ,local(当前仓库)三个级别,顺序为system-》global-》local,底层配置会覆盖顶层配置,分别使用--system/global/local 可以定位到配置文件。

常用配置命令:

git config –global user.name “name”

git config –global user.email 123@163.com

git config –global core.editor <>

 

查看配置

git config –list

git config –global –list

git config –system –list

git config –local --list

 

2.2.    开始——获取仓库

1、 创建仓库

git init

初始化后,目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

2、 也可以clone

git clone https://github.com/libgit2/libgit2 mylibgit

 

3.      常用操作

3.1.    创建文件并提交到版本库

在当前目录下新增或修改文件后保存到版本库分为两步:

  1. git add将修改添加到暂存区;
  2. git commit [-m commit explain ] #提交说明不是必需项,但强烈建议每次提交写说明。

 

3.2.    查看暂存区

git status

git status –s #使用状态码表示文件状态

状态码解释:

A: 你本地新增的文件(服务器上没有)

C: 文件的一个新拷贝

D: 你本地删除的文件(服务器上还在)

M: 文件的内容或者mode被修改了

R: 文件名被修改了

T: 文件的类型被修改了

U: 文件没有被合并(你需要完成合并才能进行提交)

X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)

?:未被git进行管理,可以使用git add file1把file1添加进git能被git所进行管理

 

3.3.    查看修改内容

有一个命令用于查看已修改部分:

git diff

 

git diff filename

    这种是比较 工作区和暂存区

比较暂存区与最新本地版本库

    git diff --cached  filename

比较工作区和最新版本

    git diff HEAD filename

比较工作区与指定的 commit -id 的差异

    git diff commit-id  filename

比较暂存区与指定 commit-id 的差异

    git diff --cached commit-id  filename

比较两个 commit -id 的差异

    git diff commit-id commit-id

 

3.4.    回退

版本回退

git log查看历史记录

git reset –hard commit_id回退版本

 

git reset

git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息

git reset –-soft:回退到某个版本,只回退了commit的信息,换句话说只修改了HEAD指向,暂存和工作区没变;

git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉。

 

回退总结:

  1. 版本回退:git reset --hard commit_id
  2. 查看版本号git log,确定回退到哪个版本,HEAD^也是可以的
  3. git reflog,如果回退版本后后悔了,使用该命令查看命令历史,再使用reset回到新版本。

 

3.5.    撤消

  1. 工作区文件修改撤消:git checkout –file;
  2. 工作区文件修改后添加到了暂存区,想放弃修改,分两步:

git reset HEAD <file>

git checkout --file

  1. 已提交到版本库后撤消,参考版本回退。

 

3.6.    删除文件

一般是在工作区删除了某个文件,有两种可能:

  1. 确实需要删除,那么也需要在版本库中删除:

git rm filename

git commit

  1. 误删除,需要恢复:

git checkout --filename

 

3.7.    分支管理

分支里有一个概念叫指针,head就是指针,指向当前分支,一般是master;

 

新建分支:

想要新建一个分支并同时切换到那个分支上,你可以运行一个带有 -b 参数的 git checkout 命令:

$ git checkout -b iss53

Switched to a new branch "iss53"

它是下面两条命令的简写:

$ git branch iss53

$ git checkout iss53

 

切换回 master 分支了:

$ git checkout master

Switched to branch 'master'

修改分支iss53,然后将其合并回 master 分支,可以使用 git merge。

 

$ git checkout master

$ git merge dev1

 

可以使用带 -d 选项的 git branch 命令来删除分支:

$ git branch -d hotfix

 

git branch –v

git branch –a

 

3.8.    git merge

git merge有fast-Foward模式和no-ff模式:

  1. Fast-Forward:当前分支合并到另一分支时,如果没有分歧,就会直接移动指针;

举例来说,开发一直在m分支进行,新建一个dev的分支,并在其上提交;

回到m分支,此时m分支在创建dev分支后未进行新的提交。

此时的合并就是fast-forward。

  1. no-ff模式:--no-ff:不使用fast-forward方式合并,保留分支的commit历史

git merge --no-ff -m "commit描述" 要合并的分支名

推荐使用no-ff模式,可以留下commit记录,便于管理。

 

3.8.1.   冲突

当mater和dev各有新的提交后在合并时会产生冲突。

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,打开文件后冲突示例内容:

<<<<<<< HEAD

12.merge:change master

=======

11.merge: change branch dev1

>>>>>>> dev1

可以在修改后再add,commit

 

小结:

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

用git log --graph命令可以看到分支合并图。

 

3.9.    远程仓库

3.9.1.   查看信息

git remote

git remote –v

git remote show <name> #查看详细信息

3.9.2.   添加

git remote add <shortname> <url>

 

3.9.3.   推送

语法:

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

 

以下是一些示例:

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin :master

# 等同于

$ git push origin --delete master

上面命令表示删除origin主机的master分支。如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

$ git push origin

上面命令表示,将当前分支推送到origin主机的对应分支。如果当前分支只有一个追踪分支,那么主机名都可以省略。

$ git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

$ git push -u origin master

上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

 

3.9.4.   fetch

git fetch:Download objects and refs from another repository

从远程仓库取回分支和分支信息。如果只想取回特定分支的更新,可以指定分支名。

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

git fetch  origin master

 

取回来的分支可以可以在本地主机上访问(即使断网),有一点不同是在本地主机上"远程主机名/分支名"的形式读取。

比如:

git fetch 130

git checkout 130/dev

 

3.9.5.   拉取

pull:Fetch from and integrate with another repository or a local branch

取回远程主机分支的更新,再与本地的指定分支合并。

一般情况下这样使用:

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

比如,取回130主机的dev分支,与本地的dev_temp分支合并:

git pull 130 dev:dev_temp

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull 130 dev

 

转载于:https://www.cnblogs.com/wodeboke-y/p/9866728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值