GIT教程

第一步、初始化git

进入到你需要上传的项目的目录下,右键找到Git Bah Here(安装了Git的小伙伴一般都是可以很轻松得找到),目的是可以直接在当前目录进行初始化,无需再cd寻找目录,麻烦!

打开命令行后就会自动定位到该目录,然后输入Git初始化命令。
git init
输入完以后就可以看到该目录下多了一个隐藏文件.git(前提是必须将不显示的隐藏文件显示出来)

第二步、将本地项目工作区的所有文件添加到暂存区

小数点 “.” ,意为添加文件夹下的所有文件;也可以将 “.” 换成具体的文件名,如果想添加项目中的指定文件,那就把 “.” 改为指定文件名即可。
git add .

第三步、将暂存区的文件提交到本地仓库

 注释的作用是告诉下载和浏览的用户你这次提交代码所改变的地方
	git commit -m "注释说明"

第四步、在gitee(github)上新建远程仓库

在这里插入图片描述

第五步、将本地代码仓库关联到 gitee 上

在这里插入图片描述

git remote add origin 仓库地址
仓库地址就是复制这里的地址。作用是将本地的仓库关联到远程仓库。
在这一步时如果出现错误:fatal:remote origin already exists,解决方法如下:
先输入
git remote rm origin
再输入
git remote add origin 仓库地址

第六步、将代码由本地仓库上传到 gitee远程仓库

6.1、获取远程库与本地同步合并
如果远程库不为空必须做这一步,否则后面的提交会失败。
不加这句可能报错,原因是 gitee 中的 README.md 文件不在本地仓库中。
可以通过该命令进行代码合并
git pull --rebase origin master
6.2、 把当前分支 master 推送到远程
执行此命令后有可能会让输入用户名、密码
git push -u origin master
执行完之后如果无错误就上传成功了,需要提示的是这里的 master 是 gitee默认的分支。
如果你本地的当前分支不是 master,就用git checkout master命令切换到master分支。
如果你想用本地当前分支上传代码,则把第6步的命令里的 master 切换成你的当前分支名即可。

------------------------------------------------------------------------------------------------------------------------

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git 与 SVN 区别

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

Git 与 SVN 区别点:

1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

配置

git 的设置使用 git config 命令。

显示当前的 git 配置信息:
$ git config --list
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true编辑 git 配置文件:
$ git config -e # 针对当前仓库
或者:

$ git config -e --global # 针对系统上所有仓库
设置提交代码时的用户信息:
$ git config --global user.name “runoob”
$ git config --global user.email test@runoob.com

如果去掉 --global 参数只对当前仓库有效。

Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。

**Git 常用的是以下 6 个命令:**git clone、git push、git add 、git commit、git checkout、git pull

在这里插入图片描述

说明:
workspace:工作区
staging area:暂存区/缓存区
local repository:版本库或本地仓库
remote repository:远程仓库

Git 创建仓库

git init
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

使用方法
使用当前目录作为 Git 仓库,我们只需使它初始化。

git init
该命令执行完后会在当前目录生成一个 .git 目录。

使用我们指定目录作为Git仓库。
初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
git init newrepo
git init E:\newrepo

提交内容

将目录下以 .c 结尾及 README 文件提交到仓库中,并说明提交内容
git add *.c
$ git add README
$ git commit -m ‘初始化项目版本’

克隆仓库

git clone 拷贝一份远程仓库,也就是下载一个项目。
我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。
git clone
如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone
参数说明:
repo:Git 仓库。
directory:本地目录。
比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git
执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。

如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:
$ git clone git://github.com/schacon/grit.git mygrit

Git 基本操作

创建仓库命令
git init - 初始化仓库。
git clone 拷贝一份远程仓库,也就是下载一个项目。
git add . - 添加文件到暂存区。
git commit - 将暂存区内容添加到仓库中

提交与修改

命令 说明
git add 添加文件到暂存区
git status 查看仓库当前的状态,显示有变更的文件。
git diff 比较文件的不同,即暂存区和工作区的差异。
git commit 提交暂存区到本地仓库。
git reset 回退版本。
git rm 将文件从暂存区和工作区中删除。
git mv 移动或重命名工作区文件。

提交日志

命令 说明
git log 查看历史提交记录
git blame 以列表形式查看指定文件的历史修改记录

远程操作

命令 说明
git remote 远程仓库操作
git fetch 从远程获取代码库
git pull 下载远程代码并合并
git push 上传远程代码并合并

Git 分支管理

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
Git 分支实际上是指向更改快照的指针。

有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。

创建分支命令:

git branch (branchname)

**切换分支命令:

git checkout (branchname)**
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

**合并分支命令:

git merge**
你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。

开始前我们先创建一个测试目录:

$ mkdir gitdemo
$ cd gitdemo/
$ git init
Initialized empty Git repository…
$ touch README
$ git add README
$ git commit -m ‘第一次版本提交’
[master (root-commit) 3b58100] 第一次版本提交
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README

Git 分支管理

列出分支 列出分支基本命令:

git branch
没有参数时,git branch 会列出你在本地的分支。

$ git branch
master

此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。

当你执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。

如果我们要手动创建一个分支。执行 git branch (branchname) 即可。

$ git branch testing
$ git branch
master
testing

现在我们可以看到,有了一个新分支 testing。

当你以此方式在上次提交更新之后创建了新分支,如果后来又有更新提交, 然后又切换到了 testing 分支,Git 将还原你的工作目录到你创建分支时候的样子。

接下来我们将演示如何切换分支,我们用 git checkout (branch) 切换到我们要修改的分支。

$ ls
README
$ echo ‘runoob.com’ > test.txt
$ git add .
$ git commit -m ‘add test.txt’
[master 3e92c19] add test.txt
1 file changed, 1 insertion(+)
create mode 100644 test.txt
$ ls
README test.txt
$ git checkout testing
Switched to branch ‘testing’
$ ls
README

当我们切换到 testing 分支的时候,我们添加的新文件 test.txt 被移除了。切换回 master 分支的时候,它们又重新出现了。

$ git checkout master
Switched to branch ‘master’
$ ls
README test.txt

我们也可以使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作。

$ git checkout -b newtest
Switched to a new branch ‘newtest’
$ git rm test.txt
rm ‘test.txt’
$ ls
README
$ touch runoob.php
$ git add .
$ git commit -am ‘removed test.txt、add runoob.php’
[newtest c1501a2] removed test.txt、add runoob.php
2 files changed, 1 deletion(-)
create mode 100644 runoob.php
delete mode 100644 test.txt
$ ls
README runoob.php
$ git checkout master
Switched to branch ‘master’
$ ls
README test.txt

如你所见,我们创建了一个分支,在该分支上移除了一些文件 test.txt,并添加了 runoob.php 文件,然后切换回我们的主分支,删除的 test.txt 文件又回来了,且新增加的 runoob.php 不存在主分支中。

使用分支将工作切分开来,从而让我们能够在不同开发环境中做事,并来回切换。

**删除分支

删除分支命令:
git branch -d (branchname)
**

例如我们要删除 testing 分支:
$ git branch

  • master
    testing
    $ git branch -d testing
    Deleted branch testing (was 85fc7e7).
    $ git branch
  • master

分支合并

一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用以下命令将任何分支合并到当前分支中去:

git merge
$ git branch

  • master
    newtest
    $ ls
    README test.txt
    $ git merge newtest
    Updating 3e92c19…c1501a2
    Fast-forward
    runoob.php | 0
    test.txt | 1 -
    2 files changed, 1 deletion(-)
    create mode 100644 runoob.php
    delete mode 100644 test.txt
    $ ls
    README runoob.php

以上实例中我们将 newtest 分支合并到主分支去,test.txt 文件被删除。

合并完后就可以删除分支:

$ git branch -d newtest
Deleted branch newtest (was c1501a2).
删除后, 就只剩下 master 分支了:

$ git branch

  • master

合并冲突

合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。

$ git branch

  • master
    $ cat runoob.php
    首先,我们创建一个叫做 change_site 的分支,切换过去,我们将 runoob.php 内容改为:
<?php echo 'runoob'; ?>

创建 change_site 分支:

$ git checkout -b change_site
Switched to a new branch ‘change_site’
$ vim runoob.php
$ head -3 runoob.php

<?php echo 'runoob'; ?>

$ git commit -am ‘changed the runoob.php’
[change_site 7774248] changed the runoob.php
1 file changed, 3 insertions(+)

将修改的内容提交到 change_site 分支中。 现在,假如切换回 master 分支我们可以看内容恢复到我们修改前的(空文件,没有代码),我们再次修改 runoob.php 文件。

$ git checkout master
Switched to branch ‘master’
$ cat runoob.php
$ vim runoob.php # 修改内容如下
$ cat runoob.php

<?php echo 1; ?>

$ git diff
diff --git a/runoob.php b/runoob.php
index e69de29…ac60739 100644
— a/runoob.php
+++ b/runoob.php
@@ -0,0 +1,3 @@
+<?php +echo 1; +?>
$ git commit -am ‘修改代码’
[master c68142b] 修改代码
1 file changed, 3 insertions(+)
现在这些改变已经记录到我的 “master” 分支了。接下来我们将 “change_site” 分支合并过来。

$ git merge change_site
Auto-merging runoob.php
CONFLICT (content): Merge conflict in runoob.php
Automatic merge failed; fix conflicts and then commit the result.

$ cat runoob.php # 打开文件,看到冲突内容

<?php <<<<<<< HEAD echo 1; ======= echo 'runoob'; >>>>>>> change_site ?>

我们将前一个分支合并到 master 分支,一个合并冲突就出现了,接下来我们需要手动去修改它。

$ vim runoob.php
$ cat runoob.php

<?php echo 1; echo 'runoob'; ?>

$ git diff
diff --cc runoob.php
index ac60739,b63d7d7…0000000
— a/runoob.php
+++ b/runoob.php
@@@ -1,3 -1,3 +1,4 @@@

<?php +echo 1; + echo 'runoob'; ?>

在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决

$ git status -s
UU runoob.php
$ git add runoob.php
$ git status -s
M runoob.php
$ git commit
[master 88afe0e] Merge branch ‘change_site’
现在我们成功解决了合并中的冲突,并提交了结果。

Git 查看提交历史

Git 提交历史一般常用两个命令:
git log - 查看历史提交记录。
git blame - 以列表形式查看指定文件的历史修改记录。

git log
在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。

我们可以用 --oneline 选项来查看历史记录的简洁的版本。
$ git log --oneline

我们还可以用 --graph 选项,查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项:

  • d5e9fc2 (HEAD -> master) Merge branch ‘change_site’
    |\
    | * 7774248 (change_site) changed the runoob.php
  • | c68142b 修改代码
    |/
  • c1501a2 removed test.txt、add runoob.php
  • 3e92c19 add test.txt
  • 3b58100 第一次版本提交
    现在我们可以更清楚明了地看到何时工作分叉、又何时归并。

Git 标签

我们想为我们的 runoob 项目发布一个"1.0"版本。 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)"v1.0"的标签。

-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。 我推荐一直创建带注解的标签。

$ git tag -a v1.0
当你执行 git tag -a 命令时,Git 会打开你的编辑器,让你写一句标签注解,就像你给提交写注解一样。

现在,注意当我们执行 git log --decorate 时,我们可以看到我们的标签了:

  • d5e9fc2 (HEAD -> master) Merge branch ‘change_site’
    |\
    | * 7774248 (change_site) changed the runoob.php
  • | c68142b 修改代码
    |/
  • c1501a2 removed test.txt、add runoob.php
  • 3e92c19 add test.txt
  • 3b58100 第一次版本提交

如果我们忘了给某个提交打标签,又将它发布了,我们可以给它追加标签。

例如,假设我们发布了提交 85fc7e7(上面实例最后一行),但是那时候忘了给它打标签。 我们现在也可以:

$ git tag -a v0.9 85fc7e7
$ git log --oneline --decorate --graph

  • d5e9fc2 (HEAD -> master) Merge branch ‘change_site’
    |\
    | * 7774248 (change_site) changed the runoob.php
  • | c68142b 修改代码
    |/
  • c1501a2 removed test.txt、add runoob.php
  • 3e92c19 add test.txt
  • 3b58100 (tag: v0.9) 第一次版本提交
    如果我们要查看所有标签可以使用以下命令:

$ git tag
v0.9
v1.0
指定标签信息命令:
git tag -a -m “runoob.com标签”
PGP签名标签命令:
git tag -s -m “runoob.com标签”

Git 远程仓库(Github)

1.先创建一个文件夹,名字为远程仓库的名称
XXXX
2.在该文件目录下打开Git Bash
3.输入git init,进行初始化(初次连接时)
4.连接远程仓库(初次连接是下一次进入该文件夹就不用了)
输入下列命令
git remote add origin git@github.com:yourName/repositoryname.git
git remote add origin https://github.com/yourName/repositoryname.git

yourName是用户名,repositoryname是仓库名字
删除远程连接
git remote rm origin
5.从远程仓库拉取文件
git pull origin “分支名”

6.查看工作目录状态
git status

7.提交更改,添加备注信息
git commit -m “备注信息”
注意:若第6步的信息中有以下情况:

1.Untraked Files
使用git add .解决该问题
2.Changes not staged for commit
使用 git commit -am “备注信息” 解决

8.将本地文件push到远程仓库
git push origin “分支名”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值