当前位置:   article > 正文

Git 操作教程_git操作教程

git操作教程

1.Git简介

Git是目前世界上最先进的分布式版本控制系统,在处理各种项目时都十分高效,而且非常的高大上。

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。而且集中式版本控制系统是必须联网才能工作。

Git是分布式版本控制系统,它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。

2.Git安装

(1)windows系统

打开Git官网下载安装程序,然后按照默认选项安装即可。

安装完成后,打开Git bash软件,弹出一个类似cmd的命令行窗口,证明安装成功。
在这里插入图片描述
安装完成后,需要进行设置,在命令行输入以下代码:

$ git config --global user.name "Your Name"
$ git config --global user.email "Email@example.com"
  • 1
  • 2

顾名思义,这是设置你的名字和Email地址。

我们可以查看一下用户名和密码:

$ git config user.name
$ git config user.email
  • 1
  • 2

(2)Linux系统

对于稳定版本的 Debian / Ubuntu,可以在shell输入以下代码:

$ sudo apt-get install git
  • 1

对于Ubuntu,或者用 PPA 安装 Git

$ sudo add-apt-repository ppa:git-core/ppa 
$ sudo apt-get update
$ sudo apt install git
  • 1
  • 2
  • 3

3.远程仓库准备工作

开始这部分之前,我们需要自行注册GitHub账号。而且,因为你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要设置:

(1) 创建SSH Key。在用户主目录C:\Users\Administrator\下,看看有没有 .ssh 目录,如果有的话,看此目录下有没有 id_rsaid_rsa.pub 这两个文件,如果有,直接跳到下一步。如果没有,打开Git Bash,创建SSH。如下图所示,创建成功。

$ ssh-keygen -t rsa -C "UserEmail@qq.com"
  • 1

在这里插入图片描述
(2) 登陆 GitHub,打开 “settings”
在这里插入图片描述
然后点击"Add SSH and GPG Keys",再点击"New SSH Key"进行SSH Key 的创建,填上任意 Title ,把 id_rsa.pub 中的内容复制到Key文本框内:
在这里插入图片描述

4.创建版本库

版本库(repository)也叫仓库,可以看做一个目录,这个目录里的所以文件都由Git进行管理,每个文件的修改、删除,Git都能跟踪。

1.选择一个合适的地方,创建一个空目录:

$ mkdir java //创建一个名叫java的空目录
$ cd java //把java设置为当前目录
$ pwd //查看当前目录
/c/Users/Administrator/Desktop/JAVA/java
  • 1
  • 2
  • 3
  • 4

如果使用Windows系统,要保证目录名不包含中文。

2.通过如下命令把这个目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in C:/Users/Administrator/Desktop/JAVA/java/.git/
  • 1
  • 2

这样Git就把仓库建好啦,我们可以看到在当前目录下多了一个 .git 的目录,这个目录是Git来跟踪管理版本库的。

5.将本地仓库添加到远程仓库

(1) 把文件添加到版本库

我们在 java 目录下编写一个 readme.txt 文件,用 git add 命令,把文件添加到仓库:

$ git add readme.txt
  • 1

执行以上命令,没有任何显示。如果添加文件夹下所有文件,则运行:

$ git add .
  • 1

(2) 用 git commit 命令,把文件提交到仓库:

$ git commit -m "wrote a readme file" //-m后面输入的是本次提交的说明,可以输入任意内容。
[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+) //1 file changed:1个文件被改动(新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt内有两行内容)
create mode 100644 readme.txt
  • 1
  • 2
  • 3
  • 4

(3) 运行 git status 命令,查看仓库状态:

$ git status //查看仓库当前的状态
On branch master
Changes not staged for commit: //没有文件将要被提交
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
   
   modified:   readme.txt
    
no changes added to commit (use "git add" and/or "git commit -a")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(4) 想知道上次是怎么修改readme.txt 文件的,需要用 git diff 命令:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system. //这一句是被删掉的
+Git is a distributed version control system. //这一句是新添加的
Git is free software.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(5) 可以用 git log 命令进行查看之前提交的几个版本的readme.txt

$ git log //查看历史记录
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 16 10:47:00 2021 +0800
 
    the second time to modify
 
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 16 10:47:00 2021 +0800
 
    the first time to modify
 
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 16 10:47:00 2021 +0800
 
    wrote a readme file
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

我们还可以加上 --pretty=oneline 参数:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file //一大串数字是 commit id ,而且每个人的都不一样。
  • 1
  • 2
  • 3
  • 4

现在如果我们想把 readme.txt 文件退回到上一个版本,就可以使用 git reset 命令:

$ git reset --hard HEAD^ //HEAD表示当前版本,则HEAD^表示上一个版本,那么上上版本就是HEAD^^
HEAD is now at e475afc add distributed
  • 1
  • 2

这时候用 cat 命令查看一下 readme.txt 的内容:

$ cat readme.txt //查看 readme.txt 文件的内容
Git is a distributed version control system.
Git is free software.//readme.txt //文件返回到了上一个版本。
  • 1
  • 2
  • 3

现在想要回到最新的版本,还是使用 git reset 命令:

$ git reset --hard 1094a //这里不能用HEAD而必须使用 commit id ,因为最新版本在之前返回时已经被删除了,1094a就是最新版本的 commit id,可以在之前的代码中查到
HEAD is now at 83b0afe append GPL
  • 1
  • 2

6.工作区和暂存区

工作区(Working Directory),之前创建的 java 文件夹就是一个工作区。

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

版本库里面的 index(stage) 文件叫暂存区,还有Git为我们自动创建的第一个分支 master ,以及指向 master 的一个指针叫做 HEAD。
在这里插入图片描述
前面我们提到过,如果我们想把文件添加到Git里面时,需要分两步:

第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区。

第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。(我们现在只有唯一一个分支 master,所以现在就是往 master 分支上提交更改)

实践一下,在 readme.txt 文件中加上一行内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
  • 1
  • 2
  • 3

然后在工作区新建一个 LICENSE 文本文档(任意内容)
使用两次 git add 命令分别把 readme.txt 和 LICENSE 都添加后,可以用 `git status 命令查看一下:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
 
    new file:   LICENSE
    modified:   readme.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

再使用 git commit 命令把暂存区的所有修改提交到分支:

$ git commit -m "understand how stage works"
[master e43a48b] understand how stage works 2 files changed, 2 insertions(+)
create mode 100644 LICENSE`
  • 1
  • 2
  • 3

这时候的工作区就是干净的:

$ git status
On branch master
nothing to commit, working tree clean
  • 1
  • 2
  • 3

这时候版本库就变成了这样:

在这里插入图片描述

7.删除文件

在工作区即 learngit 文件夹下新建一个 test.txt 文件,并添加和提交到Git:

$ git add test.txt

$ git commit -m "add test.txt"
[master b84166e] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这时候可用 rm 命令删除:

$ rm test.txt
  • 1

这时工作区和版本库就不一样了。

现在又分两种情况:

(1) 确实要从版本库中删除该文件,那就用 git rm 命令删除,并且 git commit

$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这时候文件就从版本库被删除了。

(2) 文件被删错了。因为版本库里有,所以很好恢复:

$ git checkout -- test.txt //用版本库里的版本替换工作区的版本。
  • 1

8.添加远程库

现在我们已经在本地创建了一个Git仓库了,又想在GitHub上创建一个Git仓库,然后让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。那么我们应该怎么做呢?

首先,登陆GitHub,在右上角找到 “Create a new repository” 按钮,创建一个新的仓库:
在这里插入图片描述

Repository name填入 java(因为我已经创建完成了,所以提示此用户名存在)其他保持默认设置,点击 “Create repository” 按钮,就成功地创建了一个新的Git仓库:大家创建完以后应该是一个空的仓库。这时候我们可以在本地 java 仓库下运行命令:

$ git remote add origin git@github.com:UserName/java.git //“UserName”是GitHub的账户名,你需要填写你自己的账户名
  • 1

添加后,远程库的名字就是 origin ,这是Git默认的叫法。

然后,我们就可以把本地库的所有内容推送到远程库上:

$ git push -u origin master
Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
Enumerating objects: 43, done.
Counting objects: 100% (43/43), done.
Delta compression using up to 8 threads
Compressing objects: 100% (35/35), done.
Writing objects: 100% (43/43), 20.46 KiB | 1.14 MiB/s, done.
Total 43 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), done.
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote:      https://github.com/zhang-chao-zhi/java/pull/new/master
remote:
To github.com:zhang-chao-zhi/java.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

使用 git push 命令,就是把当前分支 master 推送到远程。

因为远程库是空的,所以我们在第一次推送 master 分支时,要加上 -u 参数,Git不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令。

推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:
在这里插入图片描述
从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master
  • 1

把本地 master 分支的最新修改推送至GitHub。现在,我们拥有了真正的分布式版本库。

9.问题解答

(1) 如果遇到Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':,可以通过命令或者输入密码:

$ ssh-keygen -t rsa -C "UserEmail@qq.com"
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
  • 1
  • 2
  • 3

问题得到解决。

(2) 如果上传文件时遇到 ! [rejected] master -> master (fetch first) error: failed to push some refs to 'github.com:xxxx/xxxx.git',出现这个问题一般是由于你新建的项目的README.md不在本地,解决:先同步到本地

$ git pull --rebase origin master
warning: no common commits
remote: Enumerating objects: 69, done.
remote: Counting objects: 100% (69/69), done.
remote: Compressing objects: 100% (62/62), done.
remote: Total 69 (delta 17), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (69/69), 848.79 KiB | 162.00 KiB/s, done.
From github.com:zhang-chao-zhi/autoTestBook
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master
Successfully rebased and updated refs/heads/master.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/917308
推荐阅读
相关标签
  

闽ICP备14008679号