git使用及Github

主要资料:
廖雪峰Git学习教程
git官方手册
git指令手册

1 下载

官方下载链接🔗
在这里插入图片描述
我使用的是mac,mac的下载方式还挺多的

2 git本地使用

初始

git version
#查看git的版本,同时也可以确定git是否安装成功
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
#第一次使用git需要配置一下用户名和邮箱

创建版本库

pwd命令用于显示当前目录

mac@MacBook-Pro ~ % mkdir learngit
mac@MacBook-Pro ~ % cd learngit
mac@MacBook-Pro learngit % pwd
/Users/mac/learngit  #版本库的位置

通过 git init 命令把这个目录变成Git可以管理的仓库:

mac@MacBook-Pro learngit % git init
Initialized empty Git repository in /Users/mac/learngit/.git/
##我们创建的是一个空的仓库

把文件添加到版本库

版本控制系统其实只能跟踪文本文件的改动,比如txt文件,网页,程序代码等

我们先创建一个新的txt文件,内容随意

git test
learning :)

想用git仓库管理的文件一定要放在git的目录下,这里也就是learngit下,

mac@MacBook-Pro learngit % git add readme.txt
#把文件添加到仓库
mac@MacBook-Pro learngit % git commit -m "wrote a readme file"
#-m后面输入的是本次提交的说明,最好是有意义的内容,这样方便之后寻找修改的版本
# commit 也可以一次提交多个文件

提交成功之后,

mac@MacBook-Pro learngit % git commit -m "wrote a readme file"
[master (root-commit) c489abc] wrote a readme file
 1 file changed, 2 insertions(+)  #一个文件被改动,有两行内容
 create mode 100644 readme.txt

文件修改后再提交

我们将readme.txt的内容进行修改,如下:

This is a simple thing 
Although I don't know what I'm learning ?

之后运行git status查看结果

mac@MacBook-Pro learngit %  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 diff 可以查看修改的内容 (可以理解为查看工作区和暂存区的差异,之后会讲)

mac@MacBook-Pro learngit % git diff
diff --git a/readme.txt b/readme.txt
index abbfcc7..950b9b8 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,4 @@
 git test
-learning :)
\ No newline at end of file
+learning :)
+This is a simple thing 
+Although I don't know what I'm learning ?
\ No newline at end of file
mac@MacBook-Pro learngit % 

知道了对readme文件的修改之后,继续把它提交到仓库进行保存,仍然使用git add,同时我们可以使用git status查看当前仓库的状态

mac@MacBook-Pro learngit % git add readme.txt
mac@MacBook-Pro learngit % git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   readme.txt

之后使用git commit进行提交

mac@MacBook-Pro learngit % git commit -m"add some setences"
[master cf67013] add some setences
 1 file changed, 3 insertions(+), 1 deletion(-)
mac@MacBook-Pro learngit % 

版本回退

再次修改readme.txt如下

Version 3 
Git is a distributed version control system.
Git is a free software under the GPL.

再次提交修改之后,目前我们在git仓库里已经提交了三次修改,我们可以使用git log查看历史修改记录

mac@MacBook-Pro learngit % git log
commit 202ea23117bb8114df92c479030bb567706f9f12 (HEAD -> master)
Author: mounvo <mounvo@outlook.com>
Date:   Tue Oct 20 09:55:29 2020 +0800

    delete the sentences and append the GRL

commit cf67013f6093037218129abc859262798b3cccf5
Author: mounvo <mounvo@outlook.com>
Date:   Tue Oct 20 09:48:30 2020 +0800

    add some setences

commit c489abcdaf82277dad5a36f7cce4e7a848125dd6
Author: mounvo <mounvo@outlook.com>
Date:   Mon Oct 19 22:33:29 2020 +0800

    wrote a readme file

显示的是从最近到最远的提交日志,如果不想看见author和date等信息,可以修改如下

mac@MacBook-Pro learngit % git log --pretty=oneline
202ea23117bb8114df92c479030bb567706f9f12 (HEAD -> master) delete the sentences and append the GRL
cf67013f6093037218129abc859262798b3cccf5 add some setences
c489abcdaf82277dad5a36f7cce4e7a848125dd6 wrote a readme file

202ea23117bb8114df92c479030bb567706f9f12 是commit id

在git中,用HEAD表示当前版本,上一个版本也就是HEAD^,上上一个版本就是HEAD ^^ 第100个版本写成HEAD~100

现在我们想将文本回退到上一个版本,使用git reset 命令

mac@MacBook-Pro learngit % git reset --hard HEAD^
HEAD is now at cf67013 add some setences

使用cat 查看readme的内容是不是被还原了

mac@MacBook-Pro learngit % cat readme.txt
git test
learning :)
This is a simple thing 
Although I don't know what I'm learning ?%

这时再查看git log,会发现现在的版本库中已经没有version3的版本了,如果想要恢复version3的话,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL的commit id,于是就可以指定回到未来的某个版本:

mac@MacBook-Pro learngit % git reset --hard 202ea
HEAD is now at 202ea23 delete the sentences and append the GRL

这时候发现,readme文件的内容已经被修改

mac@MacBook-Pro learngit % cat readme.txt
Version 3 
Git is a distributed version control system.
Git is a free software under the GPL.

在git中,版本的转换非常快,因为Git在内部有个指向当前版本的HEAD指针,当进行版本的转换时,仅仅是把HEAD的指针进行转换,而且将工作区的文件进行更新:
用了廖神的图,我自己的历史记录不一样,懂意思就可以啦
如果找不到新版本的commit id怎么办?
Git提供了一个命令git reflog用来记录每一次的命令:

202ea23 (HEAD -> master) HEAD@{0}: reset: moving to 202ea
202ea23 (HEAD -> master) HEAD@{1}: reset: moving to 202ea
cf67013 HEAD@{2}: reset: moving to HEAD^
202ea23 (HEAD -> master) HEAD@{3}: commit: delete the sentences and append the GRL
cf67013 HEAD@{4}: commit: add some setences
c489abc HEAD@{5}: commit (initial): wrote a readme file

版本管理

工作区和暂存区的概念

工作区 working directory就是在电脑中可以直接看到的目录
在这里插入图片描述
版本库 repository
工作区中的隐藏目录.git
版本库中最重要的东西就是称为stage的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD在这里插入图片描述
前面我们提交文件的时候,需要add 和 commit 两步骤,add是将需要提交修改的文件通通放到暂存区,然后,一次性提交暂存区所有的修改
我们在创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,git commit就是往master分支上提交修改。
也就是说,在工作区的内容,比如我们的readme.txt,我们对它再次修改后,使用git diff命令,是比较了暂存区和工作区之间的内容

diff --git a/readme.txt b/readme.txt
index e75601f..fef70ad 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,4 @@
 Version 3 
 Git is a distributed version control system.
 Git is a free software under the GPL.
+test

再使用git add把文件添加进去之后,git diff 没有任何内容,也就是说明,现在暂存区和工作区之间的内容没有差别

mac@MacBook-Pro learngit % git diff
mac@MacBook-Pro learngit %

git diff -cached 可以查看暂存区和仓库的差异

mac@MacBook-Pro learngit % git diff --cached
diff --git a/readme.txt b/readme.txt
index e75601f..fef70ad 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,4 @@
 Version 3 
 Git is a distributed version control system.
 Git is a free software under the GPL.
+test

git diff HEAD 可以查看工作区和版本库的差异

mac@MacBook-Pro learngit % git diff HEAD
diff --git a/readme.txt b/readme.txt
index e75601f..fef70ad 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,4 @@
 Version 3 
 Git is a distributed version control system.
 Git is a free software under the GPL.
+test

其实这里更加直接的展示方式应该是先修改一次txt,add,commit,再修改一个txt,add,再修改txt,这样暂存区和版本库里的内容也有差异。

管理修改

首先,根据上一节的名词解释,要理解的一个流程就是
工作区 >>>(add) 暂存区 >>>(commit) 版本库
第一次修改 -> git add -> 第二次修改 -> git commit
这种操作只会将第一次修改的内容提交,因为第二次修改的内容还没有被add

撤销修改

我们再次修改readme.txt里的内容后,不做任何操作

Version 3 
Git is a distributed version control system.
Git is a free software under the GPL.
test
Im so hungry now :(

git checkout --file 可以丢弃工作区的修改:

$ git checkout -- readme.txt

这里分两种情况

  • readme.txt 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • readme.txt 已经被添加到暂存区后,又作了修改,现在,撤销修改就回到了添加到暂存区之后的状态。

这里我的文件就恢复到了如下状态(多一行是之前操作了一下链接github多加了一行):

mac@MacBook-Pro learngit % cat readme.txt
Version 3 
Git is a distributed version control system.
Git is a free software under the GPL.
test
## readme!!

如果修改之后又添加到暂存区了呢?
使用 git reset HEAD 可以把暂存区的修改撤销掉,重新放回工作区
修改内容如下

Version 3 
Git is a distributed version control system.
Git is a free software under the GPL.
test
## readme!!
Hungry hungry so hungry!!
mac@MacBook-Pro learngit % git add readme.txt
mac@MacBook-Pro learngit % git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   readme.txt

mac@MacBook-Pro learngit % git reset HEAD readme.txt
Unstaged changes after reset:
M	readme.txt

这时用git diff 查看

mac@MacBook-Pro learngit % git diff
diff --git a/readme.txt b/readme.txt
index 330e7d9..d374738 100644
--- a/readme.txt
+++ b/readme.txt
@@ -3,3 +3,4 @@ Git is a distributed version control system.
 Git is a free software under the GPL.
 test
 ## readme!!
+Hungry hungry so hungry!!
\ No newline at end of file

再一次git checkout --file清理掉工作区的内容

如果已经提交到版本库,那就是用回退版本。

删除文件

可以使用 rm 命令删除文件,这个时候,工作区和版本库的内容不一致了,这个时候,可以有两种选择:

  • 确实从版本库中也要删掉这个文件,那就用命令git rm删掉,并且git commit
  • 另一种情况是误删,可以用 git cheakout -- test.txt 把误删的文件恢复
    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

3 gitHub远程管理

创建连接

本地git仓库和GitHub仓库之间的传输是通过SSH加密的,首次需要进行设置。
1、首先,创建SSH Key
打开Shell,

 $ ssh-keygen -t rsa -C "youremail@example.com"

密码可以不用设置,一路回车就好
可以直接使用open ~/.ssh 打开.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

2、登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:cat ~/.ssh/id_rsa.pub,提交,就完成了。

添加远程库

首先在gitHub上新建一个reposotiry
在这里插入图片描述
在这里插入图片描述
要注意一个大问题,现在gitHub使用是main而不是master,所以,git push origin main在这里插入图片描述

从远程库克隆

我的gitHub上已有一个repository,现在我想把本地的文件上传上去,
首先使用git clone 克隆一个本地库
地址在绿色的code下载里面

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

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

哦对,首先以需要上传的文件存放的文件夹为位置打开终端

mac@MacBook-Pro datawhaleOctoberNumpy git clone https://github.com/Mounvo/dataWhale_introductionToNumpy.git
Cloning into 'dataWhale_introductionToNumpy'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 21 (delta 3), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (21/21), done.

在这里插入图片描述
本地文件夹中出现了一个与gitHub项目名称一样的文件夹,我们将要上传的文件复制进去
然后切换目录到git文件夹中

mac@MacBook-Pro datawhaleOctoberNumpy % cd dataWhale_introductionToNumpy

然后使用git add . git commit -m " ..."

mac@MacBook-Pro dataWhale_introductionToNumpy % git add .
mac@MacBook-Pro dataWhale_introductionToNumpy % git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   task01/.ipynb_checkpoints/task01-checkpoint.ipynb
	new file:   task01/images/datetime64type.png
	new file:   task01/images/numpyTypes.png
	new file:   task01/images/typecode.png
	new file:   task01/task01.ipynb
	new file:   task01/数据类型及创建.md

mac@MacBook-Pro dataWhale_introductionToNumpy % git commit -m "task 01"
[main 3269cb1] task 01
 6 files changed, 2694 insertions(+)
 create mode 100644 task01/.ipynb_checkpoints/task01-checkpoint.ipynb
 create mode 100644 task01/images/datetime64type.png
 create mode 100644 task01/images/numpyTypes.png
 create mode 100644 task01/images/typecode.png
 create mode 100644 task01/task01.ipynb
 create mode 100644 task01/数据类型及创建.md

最后使用git push -u origin main

mac@MacBook-Pro dataWhale_introductionToNumpy % git push -u origin main
Counting objects: 10, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 239.83 KiB | 21.80 MiB/s, done.
Total 10 (delta 0), reused 0 (delta 0)
To https://github.com/Mounvo/dataWhale_introductionToNumpy.git
   922ef5a..3269cb1  main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

至此,gitHub上就会出现你的项目了。

当需要再次提交本地文档到gitHub中时,这次使用git push -u origin main往往会出现报错(忘记截图了)

从别人那翻来的,大概如下:

error: failed to push some refs to 'git@github.com....'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

大概原因是远程的文件和本地的文件应该需要合并之后才能上传新文件,
首先使用git pull origin main
再上传 git push -u origin master

问题成功解决。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值