VIP创新项目1课程总结2021-2022学年第1学期(4)

简介: 文章目录VIP创新项目1课程总结2021-2022学年第1学期1. Java基础1.1 Java代码是如何执行的1.2Java打包案例1.带package的jar包——直接输出hello

3.4 Git基本命令

1. 初始化一个版本库repository:

版本库可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

  • 创建一个空目录:
$ mkdir learngit
$ cd learngit
  • 通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

2.把文件添加到版本库

在版本库learngit的目录下,编写一个readme.txt文件,内容如下:

Git is a version control system.
Git is free software.

第一步,用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

3.时光穿梭机

修改readme.txt文件,改成如下内容:

Git is a distributed version control system.
Git is free software.

现在,运行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")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,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.

git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是git add:

$ git add readme.txt

同样没有任何输出。在执行第二步git commit之前,我们再运行git status看看当前仓库的状态:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
  modified:   readme.txt

git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:

$ git commit -m "add distributed"
[master e475afc] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)

提交后,我们再用git status命令看看仓库的当前状态:

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

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。

小结

  • 要随时掌握工作区的状态,使用git status命令。
  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

4. 版本归退

查看历史提交记录:

版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800
    append GPL
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800
    add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800
    wrote a readme file

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。


如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

回归历史版本

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

现在,我们要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令:

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed

–hard参数有啥意义?这个后面再讲,现在你先放心使用。

备注:如果版本回滚后,git log会丢失之后的记录,也就是说无法再查看到当前版本之后的版本了,这时可采用git reflog命令,该命令可以记录每一次操作

Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

从命令的历史执行记录可以看到每一次的变化,这样就可以回滚版本到指定的版本了。


总结下:


HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

5 其它命令

命令git checkout

命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。


命令git rm

从版本库中删除该文件,那就用命令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

现在,文件就从版本库中被删除了。

如果删错了,可以把误删的文件从版本库中恢复到最新版本:

$ git checkout -- test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

3.5远程仓库

添加远程仓库

假设你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。

把已有的本地仓库与远程仓库联在本地的learngit仓库下运行命令:

$ git remote add origin git@github.com:michaelliao/learngit.git

请千万注意,把上面的michaelliao替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。


添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。


下一步,就可以把本地库的所有内容推送到远程库上:

$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。


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


推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:


从远程库克隆


上次我们讲了先有本地库,后有远程库的时候,如何关联远程库。

现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:


$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.


注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了

$ cd gitskills
$ ls
README.md

如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。


你也许还注意到,GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。


使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。


小结


要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。


Git支持多种协议,包括https,但ssh协议速度最快。

3.6Git的常用命令汇总

简易的命令行入门教程:

Git 全局设置:

git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"

创建 git 仓库:

mkdir gittest1
cd gittest1
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin2 git@gitee.com:你的用户名/gittest1.git
git push -u origin master

已有仓库?

cd existing_git_repo
git remote add origin git@gitee.com:你的用户名/gittest1.git
git push -u origin master

总结

本文主要分享了Java打包,Maven的安装与使用,Git的安装与使用,可能内容不够全面,但尽可能在较段的时间内,给读者提供上诉三种技术的基本面貌。

相关文章
|
9月前
|
机器学习/深度学习 人工智能 安全
IT专业报考指南:选择正确的学校和课程
随着高考的技术,男怕入错行,女怕嫁错郎,专业的选择也是至关重要的,当准备报考IT专业时,选择适合自己的学校和课程是至关重要的一步。随着信息技术的快速发展和应用范围的不断扩大,IT行业的就业前景变得更加广阔。然而,在众多学校和课程中做出明智的选择并不容易。这就是为什么一个全面的报考指南对于帮助你确定正确的学校和课程至关重要。
51 0
|
机器学习/深度学习 自然语言处理 算法
从学校到职场:在阿里的这7年(内含招聘)
本文不仅希望能给一些初入职场的同学一些思考,也是通过自己阿里7年的总结,对自己未来的一种期望,也希望自己未来再遇到槽糕的处境迷茫的时候,可以回看下自己的心路历程,并做出更理性的选择。
18954 6
从学校到职场:在阿里的这7年(内含招聘)
|
Java 测试技术 Maven
VIP创新项目1课程总结2021-2022学年第1学期(2)
文章目录 VIP创新项目1课程总结2021-2022学年第1学期 1. Java基础 1.1 Java代码是如何执行的 1.2Java打包案例 1.带package的jar包——直接输出hello
|
前端开发 Java 编译器
VIP创新项目1课程总结2021-2022学年第1学期(1)
文章目录 VIP创新项目1课程总结2021-2022学年第1学期 1. Java基础 1.1 Java代码是如何执行的 1.2Java打包案例 1.带package的jar包——直接输出hello
VIP创新项目1课程总结2021-2022学年第1学期(1)
|
Dubbo Java 应用服务中间件
VIP创新项目1课程总结2021-2022学年第1学期(3)
文章目录 VIP创新项目1课程总结2021-2022学年第1学期 1. Java基础 1.1 Java代码是如何执行的 1.2Java打包案例 1.带package的jar包——直接输出hello
VIP创新项目1课程总结2021-2022学年第1学期(3)
|
存储 SQL 分布式计算
Hadoop大数据技术课程总结2021-2022学年第1学期(上)
文章目录 Hadoop大数据技术课程总结 1.大数据概述 1.1大数据时代的4V 1.2大数据时代的三次浪潮
Hadoop大数据技术课程总结2021-2022学年第1学期(上)
|
SQL 存储 分布式计算
Hadoop大数据技术课程总结2021-2022学年第1学期(下)
文章目录 Hadoop大数据技术课程总结 1.大数据概述 1.1大数据时代的4V 1.2大数据时代的三次浪潮
Hadoop大数据技术课程总结2021-2022学年第1学期(下)
|
SQL 分布式计算 资源调度
Hadoop大数据技术课程总结2021-2022学年第1学期(中)
文章目录 Hadoop大数据技术课程总结 1.大数据概述 1.1大数据时代的4V 1.2大数据时代的三次浪潮
Hadoop大数据技术课程总结2021-2022学年第1学期(中)
|
运维 前端开发 小程序
自己学校里的实训做笔记
自己学校里的实训做笔记
自己学校里的实训做笔记
|
网络安全 Windows
千峰课程网安笔记(1)
1如何使两台虚拟机在同一局域网下互Ping以及关于单方面ping通的解决办法
94 0
千峰课程网安笔记(1)