GIT相关

GIT 是什么?

Git 是目前世界上最先进的分布式版本控制系统。并且它是一个免费的、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

git跟传统的代码管理器(如:svn)不同, 主要区别在于git多了个本地仓库以及缓存区,所以即使无法联网也一样能提交代码。术语解释:

工作区间: 即我们创建的工程文件, 在编辑器可直观显示;

缓存区: 只能通过git GUI或git shell 窗口显示,提交代码、解决冲突的中转站;

本地仓库: 只能在git shell 窗口显示,连接本地代码跟远程代码的枢纽,不能联网时本地代码可先提交至该处;

远程仓库: 即保存我们代码的服务器,本文以公共版本控制系统:github为例,登录github账号后可直观显示;

什么是版本控制系统

版本控制是一种系统,它跟踪一段时间内对文件或文件集合的修改,以便以后可以恢复不同的副本。如果开发人员在他的代码的新版本中有一些错误,他可以切换回以前的(旧的)版本。

当多个开发人员处理单个项目时,单个开发人员所做的更改可能会影响另一个开发人员的代码。因此,为了解决所有这些问题,git有分支,每个开发人员都在一个单独的分支上工作,使用他们的代码并测试他们的代码,最后,他们可以合并所有的分支。

如何安装 Git ?

  查看Git官方网站:https://git-scm.com/downloads

创建 Git 仓库

让我们使用Git命令。创建一个仓库,我们可以使用git init命令在我们的项目目录中初始化一个空的git仓库,它将创建一个.git文件。具有标记、对象和模板文件等配置。

  • 创建项目目录
  • 转到项目文件夹
  • Git init 命令

 

在初始化git仓库之后,用户就可以处理文件并将其推到像GitHub这样的远程仓库。

Git 修改

这是git中重要的特性之一,我们可以在执行提交之前跟踪文件或项目中任何内容的更改。

命令检测状态

git status

新仓库的状态

 

 

 修改后的仓库状态

 

 

 我已经在项目目录中创建了一个新文件index.html

提交后的仓库状态

git add .
git commit -m “(自定义提交信息)”
git status

 

 

 

Git 克隆

 

 

 

Git clone命令从GitHub克隆一个远程目录,并在本地机器上创建一个新目录。

只有公开的仓库可以克隆

 

 

们可以通过-b <name>来指定要克隆的分支名,比如
$ git clone  -b   master2   ../server  .
表示克隆名为master2的这个分支,如果省略 -b   <name> 表示克隆master分支
 
浅克隆允许克隆用户所需的指定提交数量。
 

Git 暂存区域

 

这是提交之前的一个阶段。在这个阶段,我们可以创建部分提交、编辑文件或修改文件。准备提交的过程称为准备区域。

git add .

上面的命令用于将任何修改过的和新创建的文件更新到暂存区域,删除的文件不用于暂存区域。

git add -u

上面的命令用于将任何修改和删除的文件更新到暂存区域,新创建的文件不用于暂存区域。

git add -A

上面的命令用于将任何类型的修改、删除和新创建的文件更新到暂存区域。

Git 删除文件

如果用户需要删除不必要的文件,用户可以从工作树中删除该文件,这将停止跟踪该文件的更改

 

将文件从暂存区和工作区中删除:

git rm <file>

以下实例从暂存区和工作区中删除 runoob.txt 文件:

git rm runoob.txt 

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。

强行从暂存区和工作区中删除修改后的 runoob.txt 文件:

git rm -f runoob.txt 

如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:

git rm --cached <file>

以下实例从暂存区中删除 runoob.txt 文件:

git rm --cached runoob.txt

 git rm --cached filename.txt 命令仅从仓库中删除文件,而cmd命令行上的文件将同时删除文件系统和索引。

 

 

这个cmd命令行将帮助用户删除/移除唯一指定的扩展文件集,例如扩展名为(.py)的文件。

用户可以从仓库的以前历史记录中恢复已删除的文件

Git 忽略

.gitignore文件用于排除暂存区域和git提交中要排除的文件、文件夹和文件扩展名类型。

例如,在node.js项目中,用户会忽略node_modules文件夹,因为它包含了很多外部包/模块。甚至由于IDE的扩展而自动创建的垃圾文件。

打开git忽略文件

注意,文件名是.gitignore,并且只在项目的根目录中创建。

 

linux / mac 下在命令行创建/删除 .gitignore 文件命令如下:

touch .gitignore # 新建
rm -f .gitignore # 删除

windows 系统 win10 以前的版本可能无法直接用视图菜单创建/删除以 . 号开头的文件,需要在命令行操作:

// 创建
type nul>.gitignore
// 删除
del /F .gitignore

参考 https://git-scm.com/docs/gitignore#

Git 标签

Git 的标签我们可以理解成一个项目管理中的里程碑,在开发中我们可以通过标签将一些写好的功能做一个标记。

标签用于标记代码。标签就像git中的书签,指向一个特定的提交。我们甚至可以说标记是您的代码v1、v2、v2.2的版本,创建标记需要一个参数:标签的名称。

标签的增删改查

1.创建标签

在 Git 中标签分为2种
1.轻量标签(lightweight)
轻量标签 一般是用于临时的标签 ,轻量标签仅仅记录了commit的信息
2. 附注标签(annotated)
附注标签 记录的信息更为详细 它包含了创建标签的作者 创建日期 以及标签信息。一般建议创建附注标签。

1.1 创建 附注标签

git tag -a 标签名称 -m '标签注释信息’

1.2 创建 轻量标签

git tag 标签名称

1.3 通过指定commitId 创建

git tag -a commitId
假如你想对以前的commit 创建标签 我们只需要在 标签名称后面指定 commit id即可,具体操作如下图所示:

通过git log 查看历史提交记录

我们在commit id 'xxx' 的commit 上进行创建标签。

git tag -a v1 'xxx'

如下图创建成功

2 查看标签

git tag 查看说有的标签

git tag -l ‘标签名称’ 查询指定标签名称的列表

git tag -l ‘名称.*’ 模糊查询标签列表。

git show 标签名称 查询标签的具体信息

3 删除标签

git tag -d 标签名称

4 将标签提交到远程仓库

 git push origin 标签名称

git push origin --tags 

5 删除标签

git tag -d 标签名称          我们删除本地仓库的标签后,远程仓库的标签并不会进行删除。

git push origin :refs/tags/v1.1 将远程仓库的标签进行删除。

注意:标签不能以/开始或结束。不能在标签内使用字符^、*或:

Git 分支

 

 

 

 

当用户创建他们的第一个回购时,默认情况下主分支将是主分支。

分支就像同一项目中的独立开发线。

例如,您正在为您的应用程序开发一个新特性或更新,但是这不应该崩溃您的主repo(Master)。因此,您可以为新代码的那一部分创建另一个分支。一旦您确认它不会影响主代码,您就可以合并主分支和新分支。

 

git branch 命令不只是可以创建与删除分支。 如果不加任何参数运行它,会得到当前所有分支的一个列表:

$ git branch
  iss53
* master
  testing

注意 master 分支前的 * 字符:它代表现在检出的那一个分支(也就是说,当前 HEAD 指针所指向的分支)。 这意味着如果在这时候提交,master 分支将会随着新的工作向前移动。 如果需要查看每一个分支的最后一次提交,可以运行 git branch -v 命令:

$ git branch -v
  iss53   93b412c fix javascript issue
* master  7a98805 Merge branch 'iss53'
  testing 782fd34 add scott to the author list in the readmes

--merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支。 如果要查看哪些分支已经合并到当前分支,可以运行 git branch --merged

$ git branch --merged
  iss53
* master

因为之前已经合并了 iss53 分支,所以现在看到它在列表中。 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。

查看所有包含未合并工作的分支,可以运行 git branch --no-merged

$ git branch --no-merged
  testing

这里显示了其他分支。 因为它包含了还未合并的工作,尝试使用 git branch -d 命令删除它时会失败:

$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.

如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D 选项强制删除它。

删除远程分支: git push origin --delete [branchname]

注意: 在删除远程分支时,同名的本地分支并不会被删除,所以还需要单独删除本地同名分支

git修改分支名称

本地分支重命名(还没有推送到远程)

git branch -m oldName newName

远程分支重命名 (已经推送远程-假设本地分支和远程对应分支名称相同)
a. 重命名远程分支对应的本地分支

git branch -m oldName newName

b. 删除远程分支

git push --delete origin oldName

c. 上传新命名的本地分支

git push origin newName

d.把修改后的本地分支与远程分支关联

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

 

如何在Git中合并分支

 git merge <branchName>   合并到当前分支

 git merge --no-commit <branchName>   合并而不提交      指定合并先将结果放入暂存区,让用户手动合并结果进行检查、更改、然后手动提交

Git 反做(revert)

git revert 是用于反做某一个版本,以达到撤销该版本的修改目的。

查看版本号

git log

使用反做命令,再使用提交命令

// 反做
git revert -n 版本号 
// 提交
git commit -m 版本名 

使用推送命令

// 推送远程仓库
git push

 

Git 回退(reset)

如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。

查看版本号

git log

使用以下命令将版本回退

git reset --hard 目标版本号

使用推送命令提交更改

git push -f // 强制推送

 

Git 指令

Git init
Git init:初始化一个仓库
我们初始提交代码时,需要先新建一个干净的仓库,此时可以使用Git init来初始一个仓库

添加文件:把文件添加到缓冲区

git add filename

 

添加所有文件到缓冲区(从目前掌握的水平看,和后面加“.”的区别在于,加all可以添加被手动删除的文件,而加“.”不行):

git add .

git add --all

 

删除文件

git rm filename

 

提交:提交缓冲区的所有修改到仓库(注意:如果修改了文件但是没有add到缓冲区,也是不会被提交的)

git commit -m "提交的说明"

commit可以一次提交缓冲区的所有文件

 

查看git库的状态,未提交的文件,分为两种,add过已经在缓冲区的,未add过的

git status 

从图中可以看出,绿色的就是已经add过的

 

 

比较:如果文件修改了,还没有提交,就可以比较文件修改前后的差异

git diff filename 

 

查看日志

git log

 

版本回退:可以将当前仓库回退到历史的某个版本

git reset 

第一种用法:回退到上一个版本(HEAD代表当前版本,有一个^代表上一个版本,以此类推)

git reset --hard HEAD^

第二种用法:回退到指定版本(其中d7b5是想回退的指定版本号的前几位)

git reset --hard d7b5

具体的效果如下

  

 

查看命令历史:查看仓库的操作历史

git reflog

 

git分支管理

查看分支的情况,前面带*号的就是当前分支

git branch 

 

创建分支

git branch 分支名

 

切换当前分支到指定分支

git checkout 分支名

 

创建分支并切换到创建的分支

git checkout  -b 分支名

 

合并某分支的内容到当前分支

git merge 分支名

 

删除分支

git branch -d 分支名

 

如果两个分支同时进行了同一个文件的修改和提交,在merge时就会产生冲突,首先要手动打开文件解决冲突,再提交,就相当于进行了merge

从下图可以看到,红色和绿色的虚线分别代表两个分支,两个分支分别进行了commit,最新的一次提交将两个分支内容进行了合并

查看分支合并图

git log --graph

 

 

Git 基本操作

Git 常用的是以下 6 个命令:git clonegit pushgit add 、git commitgit checkoutgit pull

 

git init 命用于在目录中创建新的 Git 仓库。

在目录中执行 git init 就可以创建一个 Git 仓库了。

 

git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。

 

git add 命令可将该文件添加到暂存区。

 

git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。

 

git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件对区别。

git diff 有两个主要的应用场景。

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

 

git commit 命令将暂存区内容添加到本地仓库中。

 

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

$ git reset HEAD^            # 回退所有内容到上一个版本  
$ git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本  
$ git  reset  052e           # 回退到指定版本
$ git reset hard HEAD~3 # 回退上上上一个版本
$ git reset hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
 

git rm 命令用于删除文件。

将文件从暂存区和工作区中删除:  git rm <file>

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。  git rm -f <file>

如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:git rm --cached <file>

 

git mv 命令用于移动或重命名一个文件、目录或软连接。

git mv [file] [newfile]

如果新但文件名已经存在,但还是要重命名它,可以使用 -f 参数:

git mv -f [file] [newfile]

git log - 查看历史提交记录。

git blame <file> - 以列表形式查看指定文件的历史修改记录。

 

git remote 命用于在远程仓库的操作。

显示某个远程仓库的信息:git remote show [remote]

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

删除远程仓库:git remote rm name

修改仓库名git remote rename old_name new_name

 

git fetch 命令用于从远程获取代码库。

 

git pull 命令用于从远程获取代码并合并本地的版本。

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

将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。

git pull origin master:brantest

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

git pull origin master

 

git push 命用于从将本地的分支版本上传到远程并合并。

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

如果本地分支名与远程分支名相同,则可以省略冒号:

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

 

posted @ 2021-01-24 12:51  白白了个白白  阅读(55)  评论(0编辑  收藏  举报