首页 > 其他分享 >学会 Git 01:Git 入门

学会 Git 01:Git 入门

时间:2022-10-02 23:55:41浏览次数:78  
标签:git 01 数据库 分支 Git master test txt 入门

Git 的数据库

Git 是一个分布式版本管理系统,可以在任何时间点将文件的状态作为更新记录保存起来。

Git 有以下两种数据库:

  • 远程数据库:有专有的服务器,可多人共享
  • 本地数据库:用户个人使用,在自己机器上的数据库

平时用自己的机器开发,并将保存在本地数据中,然后可以将自己的开发成果推送到远程数据库,或者从远程数据库获取到自己之前的开发成果或别人开发的内容,保存到本地数据库。

本地数据库向远程数据库推送数据称为 push,从远程数据库获取内容到本地数据库成为 pull

接下来我们来一步步操作,看看如何创建一个数据库,并从本地新建到推送到远程。

Git 入门之本地操作

在使用 Git 前,需要先建立一个仓库,有以下两种情形:

新建数据库复制远程数据库

我们先从新建数据库开始

首先创建一个文件夹 git_test, 然后打开 git bash

1. 新建一个仓库

git init

会提示

Initialized empty Git repository in E:/workspace/git_test/.git/

我们会看到文件夹下仍然空空如也,但是我们在查看勾选了隐藏的项目时,会看到文件夹中多了一个 .git 文件夹,这个文件夹就包含了 git 初始化后所需要的各种东西

  • hook:存放了一些 shell 脚本
  • info:存放了仓库的一些信息
  • logs(新建的项目,还未操作过,所有么有):保存了所有更新的引用记录
  • objects:存放了 git 对象
  • refs:保存当前最新的一次提交的哈希值
  • config:git 仓库的配置文件
  • description:仓库的描述信息
  • HEAD:用于映射 ref 引用,能够找到下一次提交时的前一个哈希值

现在我们在 git_test 文件夹中新建一个名为 example.txt 的文件,并在文件中写入

Hello, Git!

2. 查看变更信息

git status

这个命令用于查看我们上次提交之后是否对文件有更改。现在,我们可以使用 git status 命令,然后可以看到如下的信息

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        example.txt

nothing added to commit but untracked files present (use "git add" to track)

由于我们还没有提交过,所以显示 No commits yet

并且 Git 还提醒我们有未跟踪的文件,example.txt 不是目前历史记录的对象,需要将 example.txt 加入到索引中,可以使用 add 命令

3. 将文件添加到暂存区

我们可以使用 add 命令将文件保存到暂存区

git add <file>..

: 需要保存到暂存区的文件名

我们可以给 add 指定参数,指定参数「.」,可以把所有的文件加入到暂存区。

git add .

现在我们使用 git add .将 git_test 下的文件都保存到暂存区,然后再次使用 status

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   example.txt

看信息描述,example.txt 已经被加入到暂存区了,我们也就可以提交文件了。

我们可以使用 git commit 命令来提交文件

$ git commit -m "first commit"
[master (root-commit) 9660240] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 example.txt
  • git commit: 提交暂存区的内容添加到本地仓库中
  • -m:本次提交的一些备注信息(推荐每次提交的时候这里都要写)

我们再次使用 status 确定状态,可以看到我们没有新的变更记录了。

$ git status
On branch master
nothing to commit, working tree clean

最后我们可以使用 git log 查询版本的历史

commit 96602409abe0d4ab8f5fdf46e5dc44b69f4de1d6 (HEAD -> master)
Author: ---- 这里是git账户的个人信息 ----
Date:   Sun Oct 2 16:51:33 2022 +0800

    first commit

我们可以看到我们本次 commit 的一个序列号(哈希id):96602409abe0d4ab8f5fdf46e5dc44b69f4de1d6,说明已经提交成功了

git log 非常强大,它在复杂的 git 中可以查看分支历史,展示提交信息。是我们会常用到的命令之一,之后本系列的文章会更详细的介绍 git log。

Git 入门之远程操作

为了将本地数据库的修改记录共享到远程数据库,必须上传本地数据库中存储的修改记录。这一过程称之为推送(Push)

有时候,我们在远程看到一个项目,需要把它完整的复制下来,就需要进行克隆(Clone)操作就来复制远程数据库。执行克隆后,远程数据库的全部内容都会被下载。比如说你想下载这个教程,可以使用 git clone下载,只要 git clone 加上 url 即可。

git clone https://github.com/FelixWuu/git_test.git

很多情况下一个项目都是由多人一起维护的,那么我们就需要拉去别人的修改到本地的数据库,进行拉取(Pull) 操作就可以把远程数据库的内容更新到本地数据库。进行拉取,就是从远程的数据库把别人的修改记录下载到本地数据库中。

Push

我们试着将本地数据库推送到远程吧。我们先上 github 创建一个远程仓库,按默认的来就行。然后生成的仓库的 URL 如下:https://github.com/FelixWuu/git_test

在这之前,我们需要将本地数据库与远程数据库关联起来。我们可以使用 git romote 命令来关联远程仓库。remote 命令是这样的:

git remote add <name> <url>
  • name 表示我们给远程仓库起的名字
  • url 是远程仓库的 URL

我们尝试连接我们这个项目的地址(没有返回任何东西)

$ git remote add origin https://github.com/FelixWuu/git_test
  • 我们将远程仓库命名为 origin
    • 我推荐远程仓库都叫 origin,因为我们执行 push 或 pull 的时候,如果省略了远程仓库的名字,那么会使用默认的名字 origin,因此一般情况下,远程仓库都叫做 origin

关联了之后,我们可以用 remote 来查看远程仓库的信息

$ git remote -v
origin  https://github.com/FelixWuu/git_test (fetch)
origin  https://github.com/FelixWuu/git_test (push)

现在,我们将远程仓库推送上去。我们使用 git pull 命令,将我们的内容推送到远程的 master 分支上。

$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 224 bytes | 224.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote:      https://github.com/FelixWuu/git_test/pull/new/master
remote:
To https://github.com/FelixWuu/git_test
 * [new branch]      master -> master
branch 'master' set up to track 'origin/master'.

尝试输入 git branch 吧,它可以看到我们本地的信息

$ git branch
* master

关于 git branch,我们之后会详细聊聊它,现在,你只需要知道它的功能是展示本地的分支。


如果 Push 失败,很有可能是没有配置好 ssh-key,这里简述一下 ssh key 配置的完整步骤

  1. 检查一下是否存在 ssh-key

切换到 .ssh 文件夹下

cd ~/.ssh

然后看看有什么文件

ls

看看是否存在 id_rsa 和 id_rsa.pub文件,如果存在,则说明已经有 ssh-key 了

  1. 如果没有 ssh-key,则生成一下
ssh-keygen -t rsa -C "你的登录账号"

之后 git 会询问你一些信息,直接回车,默认同意

  1. 查看生成的密钥
cat id_rsa.pub

复制密钥内容

  1. 到 github 添加 ssh-key

点击 github 用户的头像,点击 setting,选择 SSH and GPG keys,新建一个 SSH key (New SSH key 按钮)

然后给你的密钥取个名字,把之前复制的密钥内容拷贝进去,添加即可。

  1. 验证是否配置成功
ssh -T [email protected]

可以看到返回

$ ssh -T [email protected]
Hi FelixWuu! You've successfully authenticated, but GitHub does not provide shell access.

Clone

你会发现,经过push之后,我们在 https://github.com/FelixWuu/git_test 并没有我们推送上去的内容,这是因为我们推送上去的分支名是 master,而现在,分支名为 main 的才是主分支。

自2020年10月1日后,Github会将所有新建的仓库的默认分支从master修改为main

我们切换分支,即可以看到文件

借此机会,我们熟悉一下 clone。就用 clone 把项目拉下来吧。我们现在要做的事情如下:

  1. 克隆原仓库
  2. 创建和推送 main 分支

选择任意一个文件夹,然后打开 git bash,把 git_test clone下来

$ git clone https://github.com/FelixWuu/git_test.git
Cloning into 'git_test'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.

然后切换到 git_test 项目下

cd git_test/

这时候,我们再使用 git branch 看看分支信息

$ git branch
* main

可以看到我们现在所处的分支是 main 分支,里面空空如也(如果你在建立项目时选择了生成一个 README,那么 main 分支会带有一个 README.md 文件,该文件一般用来写项目的说明)

我们再把原来项目中的example.txt拷贝到现在clone下来的文件夹中,然后 git status 看看结果

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        example.txt

nothing added to commit but untracked files present (use "git add" to track)

我们依然走一遍 add - commit - push 的流程 (记得 push 到 main 分支)

$ git add .

$ git commit -m "push to main"
[main 2b34357] push to main
 1 file changed, 1 insertion(+)
 create mode 100644 example.txt

$ git push -u origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 290 bytes | 290.00 KiB/s, done.
Total 3 (delta 0), reused 1 (delta 0), pack-reused 0
To https://github.com/FelixWuu/git_test.git
   6972647..2b34357  main -> main
branch 'main' set up to track 'origin/main'.

现在,我们可以在 main 分支下看到我们的 example.txt 了


当然,我们也可以自己设置主分支


Pull

现在我们试试 pull 命令。它的格式是:git pull <repository> <refspec>...

我们试着拉去 master 分支。因为我们在新的文件夹中操作,它并不知道 master 分支是什么,现在先按照如下命令执行

$ git checkout -b master origin/master
Switched to a new branch 'master'
branch 'master' set up to track 'origin/master'.

它的意思是切换到本地分支 master 并关联远程的 master 分支

$ git branch
  main
* master

现在查看本地分支中可以看到两条分支了,并且master分支前面有一个 * 号,且master分支被高亮,这说明我们当前处于 master 分支

执行一次 git pull 看看

$ git pull origin master
From https://github.com/FelixWuu/git_test
 * branch            master     -> FETCH_HEAD
Already up to date.

现在,我们切换到老的 git_test 项目中,修改一下 example.txt 并推送上去,然后新增一个文件 example2.txt.

我们给 example.txt 新增一句话

example.txt

Hello, Git!

Hi, Git! We meet again!

并新建一个 example2.txt,随便填写点内容

example2.txt

I'm NutCat.

然后在老的文件夹中开启一个新的 git bash,将改动推送到远端(使用 git status 可以看到我们对文件的改动)

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   example.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        example2.txt

推送流程,这里我们 git push不指定分支,Git 知道我们当前分支关联的远程分支是 origin/master, 并默认将其推送到对应的远程分支上。

$ git add .

$ git commit -m "second revision"
[master 90c277e] second revision
 2 files changed, 4 insertions(+), 1 deletion(-)
 create mode 100644 example2.txt

$ git push
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 324 bytes | 324.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/FelixWuu/git_test
   9660240..90c277e  master -> master

现在回到我们新克隆的文件夹中,可以看到文件还是只有 example.txt的。现在打开 git bash,试着再 git pull 一次。

$ git pull
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 0), reused 4 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 304 bytes | 1024 bytes/s, done.
From https://github.com/FelixWuu/git_test
   9660240..90c277e  master     -> origin/master
Updating 9660240..90c277e
Fast-forward
 example.txt  | 4 +++-
 example2.txt | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)
 create mode 100644 example2.txt

我们成功的拉去到了项目文件,并且改动和新增的文件都出现再我们文件夹中了。核对一下,内容一致。

  • 这里 pull 也没有指定分支名,因为我们之前切换到了master分支了,这条分支也关联了远程的master分支,因此pull时 Git 知道选择哪条分支。如下,括号中的就是当前分支的分支名。
Administrator@NutCat MINGW64 /e/temp/git_test (master)

标签:git,01,数据库,分支,Git,master,test,txt,入门
From: https://www.cnblogs.com/kylinxxx/p/16749794.html

相关文章

  • Git: completion
     Linux:source/etc/bash_completion.d/gitsouirce/usr/share/bash-completion/completions/git apt-getinstallgit-corebash-completion source"$(p......
  • 1106 2019数列——15分
    把2019各个数位上的数字2、0、1、9作为一个数列的前4项,用它们去构造一个无穷数列,其中第n(>4)项是它前4项之和的个位数字。例如第5项为2,因为2+0+1+9=12,个位数是......
  • Mybatis入门
    一、Mybatis简介1、MyBatis历史MyBatis是一个封装了jdbc的持久层框架,最初是Apache的一个开源项目iBatis,2010年随着开发团队转投GoogleCode旗下,iBatis3.x正式更名为M......
  • 面试题 01.09. 字符串轮转(拼接)
    面试题01.09.字符串轮转(拼接)方法1就是二重循环暴力,为了节省空间可以利用取模的思想。时间复杂度:方法2就是用两倍,然后find是否为其子串即可。时间复杂度:......
  • 【Java】01基础-05 方法
    1.方法概述1.1方法的概念方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集注意:方法必须先创建才可以使用,该过程成为方法定义方法创建后并不......
  • 【Java】01基础-04数组
    1.数组1.1数组介绍数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。1.2数组的定义格式1.2.1第一种格式数据类型[]数组名示例:int[]arr;double[]......
  • SQLMap入门——查询当前用户下的所有数据库
    确定网站存在注入后,用于查询当前用户下的所有数据库pythonsqlmap.py-uhttp://localhost/sqli-labs-master/Less-1/?id=1--dbs  ......
  • SQLMap入门——获取字段内容
    查询完字段名称之后,获取该字段的具体数据信息pythonsqlmap.py-uhttp://localhost/sqli-labs-master/Less-1/?id=1-Dmysql-Tuser-Cuser,password--dump  ......
  • SQLMap入门——获取数据库的所有用户
    列出数据库中的所有用户在当前用户有权读取包含所有用户的表的权限时,使用该命令列出所有管理用户pythonsqlmap.py-uhttp://localhost/sqli-labs-master/Less-1/?id=1......
  • SQLMap入门——获取数据库用户的密码
    列出数据库用户的密码如果当前用户有读取包含用户密码的权限,SQLMap会先列举出用户,然后列出Hash,并尝试破解pythonsqlmap.py-uhttp://localhost/sqli-labs-master/Less-......