Git基础使用教程

目录

Windows上安装Git

工作原理

Git工作流程

Git简化原理图

Git Bash基本用法

创建版本库

添加文件到版本库

检查是否有未提交的文件

检查文件是否被修改

查看历史变更记录

版本回退

将本地文件推送到github仓库

Git常用操作命令

创建仓库命令

提交与修改

提交日志

远程操作

远程仓库相关命令

分支(branch)操作相关命令

版本(tag)操作相关命令

子模块(submodule)相关操作命令

git忽略某个目录或文件不上传

Git中.gitignore的配置语法

Git 常用命令


Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理,是目前使用范围最广的版本管理工具。 

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。

Windows上安装Git

一般我们工作的电脑都是Windows系统,要使用git首先要进行安装。从软件管家或者其他平台找到git的安装包,下载后默认安装即可。

安装成功之后,可以在开始菜单里面找到git:

或者在桌面右键,也可以看到:

其中GUI为用户界面模式,Bash为命令行模式,这里就以Bash为例子介绍git的基本使用方法(其实相比于GUI,个人觉得Bash更容易学习理解)。 

  1. 设置

由于git是分布式管理工具,需要输入用户名和邮箱以作为标识,因此,在命令行输入下列的命令:

​​​​​​​

PS注意git config  --global参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱,根据个人情况设置。

工作原理

安装好之后,在使用前先来了解一下Git的工作原理,是很有必要的一件事,下面是Git的工作流程和简化原理图:

Git工作流程

​​​​​​​

Git简化原理图

​​​​​​​Git Bash基本用法

Git 常用的是以下 6 个命令:git clonegit pushgit add git commitgit checkoutgit pull,后面我们会详细介绍。

说明:

workspace:工作区

staging area:暂存区/缓存区

local repository:版本库或本地仓库

remote repository:远程仓

一个简单的操作步骤:

$ git init   

$ git add .   

$ git commit 

git init - 初始化仓库。

git add . - 添加文件到暂存区。

git commit - 将暂存区内容添加到仓库中。

创建版本库

版本库就是我们所说的“仓库”,英文名repository,你可以理解为一个目录,这个目录里面的所有文件都可以被Git管理,文件的修改,删除Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。

1.创建一个目录, 进入该目录

在Linux下能用的文件操作命令,这里基本也都可以使用;cd d:移动到d:盘下,创建一个目录,我这里叫做firstRepo,通过mkdir firstRepo命令。


2.通过git init命令将这个文件夹变成一个本地的仓库,以后就可以通过Git管理这个本地仓库了。

这时候我们发现当前目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,除非你明确知道自己在干什么,否则最好不要动这个目录里面的文件。

补充知识:所有的版本控制系统,都能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不列外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动记录下来,也就是知道图片从1kb变成2kb,但是到底改了什么,版本控制也不知道。

下面是在我的电脑→D盘→TEST文件下,创建一个名为lianxi的版本库:

命令解析:

cd:进入某个目录

mkdir:创建一个文件

pwd:显示当前的目录路径

添加文件到版本库

要添加文件到版本库,首先需要将这个目录变为git可以管理的仓库,命令如下:

然后,在lianxi目录下创建一个文件,这里我创建的文件为0409.txt,内容为123456

使用下列的命令,将创建的文件添加到暂存区,然后提交到仓库:

命令解析:

git add:将文件提交到暂存区

git commit -m:将暂存区文件提交到仓库(单引号内为注释)

检查是否有未提交的文件

通过下面的命令,检查该版本库是否有文件未提交:

命令解析:

git status:检查当前文件状态

检查文件是否被修改

修改0409.txt的文件,然后重新检查状态:

修改文件后,通过命令git status发现,文件已经被修改,但是未提交,如果要检查文件修改了什么内容,可以通过上图中的命令来查看,发现文件的第二行增加了666666的内容。

检查无误后,继续提交修改后的文件,提交命令和上面一样。

命令解析:

git diff:查看文件修改的内容

查看历史变更记录

再次修改文件内容,第三行增加233333的内容,然后保存提交:

现在已经修改了2次文件,可以通过如下命令查看历史修改记录:

如上图所示:每次提交都会有自己的版本号,当然,入过觉得这样看起来比较费事,可以使用命令,获得精简版本的日志记录。

命令解析:

git log:获得历史修改记录

git log --pretty=oneline:使记录只显示主要的内容,一行显示

版本回退

首先通过命令行查看当前的文件内容:

然后通过下列的命令,执行版本回退:

可以看到内容已经回退到上一个版本,通过git log查看修改记录,发现最近的一次233333内容的记录已经看不到了,如果想回到最新的版本,可以通过如下命令进行回退:

从上图可以看到,文件版本又回退到了最新的状态。

命令解析:

cat:查看文件内容

git reset --hard HEAD^:回退到上一个版本

git reflog:获取历史版本号

git reset --hard 版本号:回退到该版本号对应的版本

PS如果要回退到上上个版本,可以使用git reset --hard HEAD^^命令,但是这样稍显麻烦,如果回退到100个版本之前,只需要执行这个命令即可:git reset --hard HEAD~100;

将本地文件推送到github仓库

PS关于Git和github关联,可以参考这篇博客:Git关联github,这里跳过不细说。

检查文件是否还有未提交或者修改的,然后将文件提交到github仓库,命令如下:

命令解析:

git remote add origin https://github.com/zwg481026/APITest.git是将你本地的仓库和github仓库进行关联,在操作时候,需要将github地址替换为自己的,否则无法推送!

然后执行下面的命令:

第一次推送master分支时,加上了 –u参数,Git会将本地的master分支内容推送的远程新的master分支,还会把2个master分支关联起来,在以后的推送或者拉取时就可以简化操作。

推送成功后,可以立刻在github页面中看到远程库的内容已经和本地一模一样了,登录你的github,从仓库中查看:

之后,只要本地做了修改提交,就可以使用git push origin master命令进行文件推送。

Git常用操作命令

创建仓库命令

命令

说明

git init

初始化仓库

git clone

拷贝一份远程仓库,也就是下载一个项目。

提交与修改

命令

说明

git add

添加文件到仓库

git status

查看仓库当前的状态,显示有变更的文件。

git diff

比较文件的不同,即暂存区和工作区的差异。

git commit

提交暂存区到本地仓库。

git reset

回退版本。

git rm

删除工作区文件。

git mv

移动或重命名工作区文件。

提交日志

命令

说明

git log

查看历史提交记录

git blame <file>

以列表形式查看指定文件的历史修改记录

远程操作

命令

说明

git remote

远程仓库操作

git fetch

从远程获取代码库

git pull

下载远程代码并合并

git push

上传远程代码并合并

远程仓库相关命令

检出仓库:$ git clone git://github.com/jquery/jquery.git

查看远程仓库:$ git remote -v

添加远程仓库:$ git remote add [name] [url]

删除远程仓库:$ git remote rm [name]

修改远程仓库:$ git remote set-url --push [name] [newUrl]

拉取远程仓库:$ git pull [remoteName] [localBranchName]

推送远程仓库:$ git push [remoteName] [localBranchName]

*如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:

$git push origin test:master         // 提交本地test分支作为远程的master分支

$git push origin test:test              // 提交本地test分支作为远程的test分支

分支(branch)操作相关命令

查看本地分支:$ git branch

查看远程分支:$ git branch -r

创建本地分支:$ git branch [name]  ---- 注意新分支创建后不会自动切换为当前分支

切换分支:$ git checkout [name]

创建新分支并立即切换到新分支:$ git checkout -b [name]

删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并

创建远程分支(本地分支push到远程):$ git push origin [name]

删除远程分支:$ git push origin :heads/[name] 或 $ gitpush origin :[name] 

*创建空的分支:(执行命令之前记得先提交你当前分支的修改,否则会被强制删干净没得后悔)

$git symbolic-ref HEAD refs/heads/[name]

$rm .git/index

$git clean -fdx

版本(tag)操作相关命令

查看版本:$ git tag

创建版本:$ git tag [name]

删除版本:$ git tag -d [name]

查看远程版本:$ git tag -r

创建远程版本(本地版本push到远程):$ git push origin [name]

删除远程版本:$ git push origin :refs/tags/[name]

合并远程仓库的tag到本地:$ git pull origin --tags

上传本地tag到远程仓库:$ git push origin --tags

创建带注释的tag:$ git tag -a [name] -m 'yourMessage'

子模块(submodule)相关操作命令

添加子模块:$ git submodule add [url] [path]

   如:$git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs

初始化子模块:$ git submodule init  ----只在首次检出仓库时运行一次就行

更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下

删除子模块:(分4步走哦)

 1) $ git rm --cached [path]

 2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉

 3) 编辑“ .git/config”文件,将子模块的相关配置节点删除掉

 4) 手动删除子模块残留的目录

git忽略某个目录或文件不上传

1、首先我们通过git status来查看能被上传的文件,如下图所示:

2、我们查看到node_modules目录默认是可以被上传的,那么我们需要在目录总创建一个.gitignore文件,可以在目录中右键选择git bash Here,如下图所示:

3、然后输入touch .gitignore,如下图所示:

4、此时就会在目录中新建了一个.gitignore文件,如下图所示:

5、然后打开编辑器,将node_modules添加到文件中,如下图所示

忽略规则:

1.target           //忽略这个target目录

2.angular.json    //忽略这个angular.json文件

3.log/*            //忽略log下的所有文件

4.css/*.css       //忽略css目录下的.css文件

6、保存退出

7、然后在执行git status查看,就没有node_modules目录了,如下图所示:

8、然后执行git add .,就没有node_modules,如下图所示:

9、然后执行git commit -m "package",如下图所示:

10、最后执行git push即可,如下图所示:

11、此时web上已经上传成功了,如下图所示:

注意:此目录必须是通过git clone下来的,否则在push时要加上url

Git中.gitignore的配置语法

规则:

1.空行或是以”#”开头的行即注释行将被忽略。

2.可以在前面添加正斜杠/来避免递归(以斜杠 “/” 结尾表示目录)

3.可以在后面添加正斜杠/来忽略文件夹,例如build/即忽略build文件夹。

4.”!” 表示取消忽略,来否定忽略,即比如在前面用了*.apk,然后使用!a.apk,则这个a.apk不会被忽略。

5.用来匹配零个或多个字符,如.[oa]忽略所有以".o"".a"结尾,*忽略所有以结尾的文件(这种文件通常被许多编辑器标记为临时文件);[]用来匹配括号内的任一字符,如[abc],也可以在括号内加连接符,如[0-9]匹配09的数;?用来匹配单个字符。

6.以星号 “*” 通配多个字符;

7.以问号 “?” 通配单个字符;

8.以方括号 “[]” 包含单个字符的匹配列表;

9.以叹号 “!” 表示不忽略(跟踪)匹配到的文件或目录;

10.** 表示匹配零到多级目录

# 忽略 .a 文件

*.a

# 但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件

!lib.a

# 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO

/TODO

# 忽略 build/ 文件夹下的所有文件

build/

# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt

doc/*.txt

# 忽略所有的 .pdf 文件 doc/ directory 下的

doc/**/*.pdf

Git 常用命令

命令

说明

git init  

初始化本地git仓库(创建新仓库)

git config --global user.name "xxx"

配置用户名

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

配置邮件

git config --global color.ui true

git status等命令自动着色

git config --global color.status auto

git config --global color.diff auto

git config --global color.branch auto

git config --global color.interactive auto

git config --global --unset http.proxy

remove  proxy configuration on git

git clone git+ssh://git@192.168.53.168/VT.git

clone远程仓库

git status

查看当前版本状态(是否修改)

git add xyz

添加xyz文件至index

git add .

增加当前子目录下所有更改过的文件至index

git commit -m 'xxx'

提交

git commit --amend -m 'xxx'

合并上一次提交(用于反复修改)

git commit -am 'xxx'

直接提交全部修改,相当于 add commit 一起执行了。

注意:全部文件为 tracked 才行,你新建了文件为 untracked 时,该命令不会执行。

git rm xxx

删除index中的文件

git rm -r *

递归删除

git log

显示提交日志

git log -1

显示1行日志 -nn

git log -5

显示提交日志及相关变动文件

git log --stat

git log -p -m

git show dfb02e6e4f2f7b573337763e5c0013802e392818

显示某个提交的详细内容

git show dfb02

可只用commitid的前几位

git show HEAD

显示HEAD提交日志

git show HEAD^

显示HEAD的父(上一个版本)的提交日志 ^^为上两个版本 ^5为上5个版本

git tag

显示已存在的tag

git tag -a v2.0 -m 'xxx'

增加v2.0tag

git show v2.0

显示v2.0的日志及详细内容

git log v2.0

显示v2.0的日志

git diff

显示所有未添加至index的变更, 查看工作区与暂存区的不同。

git diff –cached [<commit>]

查看暂存区与指定提交版本的不同,版本可缺省(为HEAD

git diff <commit>

查看工作区与指定提交版本的不同

git diff <commit>..<commit>

查看2个指定提交版本的不同,其中任一可缺省(为HEAD

git diff <commit>...<commit>

查看2个不同分支指定提交版本的不同,其中任一可缺省(为HEAD),该命令相当于git diff $(git-merge-base A B) B

git diff --cached

显示所有已添加index但还未commit的变更

git diff HEAD^

比较与上一个版本的差异

git diff HEAD -- ./lib

比较与HEAD版本lib目录的差异

git diff origin/master..master

比较远程分支master上有本地分支master上没有的

git diff origin/master..master --stat

只显示差异的文件,不显示具体内容

git remote add origin git+ssh://git@192.168.53.168/VT.git

增加远程定义(用于push/pull/fetch

git branch

显示本地分支

git branch --contains 50089

显示包含提交50089的分支

git branch -a

显示所有分支

git branch -r

显示所有原创分支

git branch --merged

显示所有已合并到当前分支的分支

git branch --no-merged

显示所有未合并到当前分支的分支

git branch -m master master_copy

本地分支改名

git checkout

git reset 不同,reset 是替换整个目录树,多余的文件将被删除。而 checkout 只是替换指定的文件,对多余的文件保留不做任何处理。

git checkout -b master_copy

从当前分支创建新分支master_copy并检出

git checkout -b master master_copy

上面的完整版

git checkout features/performance

检出已存在的features/performance分支

git checkout --track hotfixes/BJVEP933

检出远程分支hotfixes/BJVEP933并创建本地跟踪分支

git checkout v2.0

检出版本v2.0

git checkout -b devel origin/develop

从远程分支develop创建新本地分支devel并检出

git checkout -- README

检出head版本的README文件(可用于修改错误回退)

git merge origin/master

合并远程master分支至当前分支

git cherry-pick ff44785404a8e

合并提交ff44785404a8e的修改

git push origin master

将当前分支push到远程master分支

git push origin :hotfixes/BJVEP933

删除远程仓库的hotfixes/BJVEP933分支

git push --tags

把所有tag推送到远程仓库

git fetch

获取所有远程分支(不更新本地分支,另需merge

git fetch --prune

获取所有原创分支并清除服务器上已删掉的分支

git pull origin master

获取远程分支mastermerge到当前分支

git mv README README2

重命名文件READMEREADME2

git reset --hard HEAD

将当前版本重置为HEAD(通常用于merge失败回退)

git rebase

git branch -d hotfixes/BJVEP933

删除分支hotfixes/BJVEP933(本分支修改已合并到其他分支)

git branch -D hotfixes/BJVEP933

强制删除分支hotfixes/BJVEP933

git ls-files

列出git index包含的文件

git show-branch

图示当前分支历史

git show-branch --all

图示所有分支历史

git whatchanged

显示提交历史对应的文件修改

git revert dfb02e6e4f2f7b573337763e5c0013802e392818

撤销提交dfb02e6e4f2f7b573337763e5c0013802e392818

git ls-tree HEAD

内部命令:显示某个git对象

git rm

把文件从工作区和暂存区中删除。使用 —cached 只从暂存区中删除。使用 –rf <directory> 可删除指定目录下的所有文件和子目录。

git mv <source> <destination>

在工作区和暂存区中进行移动或重命名。若 <destination> 不为一个目录名,则执行重命名。如果为一个目录名,则执行移动。

git rev-parse v2.0

内部命令:显示某个ref对于的SHA1 HASH

git reflog

显示所有提交,包括孤立节点

git show HEAD@{5}

git show master@{yesterday}

显示master分支昨天的状态

git log --pretty=format:'%h %s' --graph

图示提交日志

git show HEAD~3

git show -s --pretty=raw 2be7fcb476

git stash

暂存当前修改,将所有至为HEAD状态

git stash list

查看所有暂存

git stash show -p stash@{0}

参考第一次暂存

git stash apply stash@{0}

应用第一次暂存

git grep "delete from"

文件中搜索文本“delete from”

git grep -e '#define' --and -e SORT_DIRENT

git fsck

git gc

git clone <source repository> <destination repository>

复制本地仓库的命令方式:

<source repository>:想克隆的本地仓库路径

<destination repository>:想克隆去另一个地方的路径。例如 git clone d:/git e:/git11 是将 d:/git 的仓库(即包含隐藏文件 .git 的目录)克隆到 e:/git11 目录下。

注意:

1<destination repository> 目录必须没有在文件系统上创建,或创建了但里面为空,不然会克隆不成功。

2、与从远程拉取仓库不同,路径的最后不用写 .git 来表明这是一个仓库。

git status –s

获得简短的状态输出

git commitgit pushgit pull git fetchgit merge 的含义与区别

  •  git commit:是将本地修改过的文件提交到本地库中;
  •  git push:是将本地库中的最新信息发送给远程库;
  •  git pull:是从远程获取最新版本到本地,并自动merge;
  •  git fetch:是从远程获取最新版本到本地,不会自动merge;
  •  git merge:是用于从指定的commit(s)合并到当前分支,用来合并两个分支;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值