Git详细使用以及使用Git远程上传的具体方法(后附常用方法与命令总结)

Git与GitHub使用

前言

在项目过程中,发现协同确实存在问题,于是便学习了Git与GitHub的使用,文章较长,可以直接看最后的总结(标明了对应的章节对应)与命令。

一、简介

Git优点

  1. 对非线性开发有非常强的支持
  2. 分布式、协作式开发处理代码冲突的能力强,由于Git分布式的特性,Git可以有更精细的代码控制工作流。
  3. 数据结构更优,更适合管理大规模工程
  4. 社区更活跃,生态更完整

基本概念

本地版本控制
集中式版本控制

中央服务器,需要联网(svn)

分布式版本控制

与SVN不同,每一个developer本地的代码仓库(repository)都是一个功能完整,历史完整的仓库,它们是完全等价的。因此,在Git的开发流程中,我们会把其中一个代码仓库人为地定义为blessed repository(受庇佑的代码仓库)来作为中心代码仓库。

Staging area的存在,提供给用户更精细的代码版本管控。例如在同一个文件进行两个完全不相关的改动时,可以快速地把一部分先添加到暂存区,而不必担心这些改动会被后续的另一项改动所覆盖。

Remote “Origin”

上面已经提到,Git是分布式的,出本地以外会存在很多个等价的代码仓库。因此,在本地的配置文件中(注意这不是代码仓库的一部分),会以remote字段记录其他远程代码仓库的别称。“origin”是其中一个最常见的别称,他通常标记着我们“blessed repository”的地址。

Git历史

辅助linux使用的,版本控制软件

二、安装配置

安装

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

安装完成后,打开Git bash软件,弹出一个类似cmd的命令行窗口,证明安装成功。

介绍

Git Bash:Unix与Linux风格命令行,使用最多

Git CMD:windows风格的命令行

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

配置

  • 所有配置文件其实都在本地!
  • 环境变量只是为了在任意地方使用(Git默认控制)
git config -l
git config --system --list//可以直接查看安装目录etc中gitconfig
git config --global --list//用户名密码必须配置/用户目录下.gitconfig

可以一键完成配置

安装完成后,需要进行设置,在命令行输入以下代码:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

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

$ git config user.name
$ git config user.email

三、原理与使用

工作目录(Working Directory) 存放项目代码的地方

暂存区(Stage/index) 临时存放改动,实际上只是文件

资源库(Repository/Git Directory).git/HEAD文件指向主分支

远程git仓库(Remote Directory)
在这里插入图片描述

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

版本库里面的 index(stage) 文件叫暂存区,还有Git为我们自动创建的第一个分支 master ,以及指向 master 的一个指针叫做 HEAD。

img

工作流程

在这里插入图片描述

修改文件
git add .    //放入缓存区
git commit -m  "消息内容" //提交暂存区,放入本地仓库

在这里插入图片描述

项目搭建

在这里插入图片描述

本地仓库搭建
1.创建全新仓库
git init
2.克隆远程仓库
git clone https:XXXXXXXXX
//主要开源的可以直接复制,私有的需要输入通行证

Git文件操作

在这里插入图片描述

git status

忽略文件

npm_modules不能打包(配置文件不打包)

.idea不打包

.gitignore就是可以忽略上传的文件

在这里插入图片描述

配置

*.class
*.log
*.lock

# Package Files #
*.jar
*.war
*.ear
target/

# idea
.idea/
*.iml/

*velocity.log*

### STS ###
.apt_generated
.factorypath
.springBeans

### IntelliJ IDEA ###
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/

*.log
tem/

#rebel
*rebel.xml*

四、IDEA中集成Git操作

1.绑定Git

拷贝.git远程文件夹(已经绑定)/创建git项目

2.操作

IDEA集成了Git基本操作

在这里插入图片描述

第二个是暂存区

五、GIT的分支

master:主分支

dev:开发版分支

v3.0/v4.0:不同版本分支

多个分支并行执行,就会导致代码不冲突,也就是同时存在多版本

六、远程

连接-SSH keys配置

1.介绍

使用SSH url需要在只用之前先配置和添加好SSH key。每次fetch和push代码都不需要输入账号和密码,如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置。

免密码登录push就不需要密码了

2.生成ssh

$ ssh-keygen -t rsa
$ ssh-keygen -t rsa -C "XXXXXXX@XX.com"

然后就会显示这两行:
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/16627/.ssh/id_rsa):

这是让你输入一个文件名,用于保存刚才生成的 SSH key 代码。为了避免麻烦,不用输入,直接回车,那么就会默认生成id_rsa和id_rsa.pub两个秘钥文件。
这时候已经创建好.ssh这个文件夹了,会提示:
Created directory ‘/c/Users/16627/.ssh’.
紧接着又会问你:
Enter passphrase (empty for no passphrase):
就是让你输入密码,如果你设置了密码,那在你使用ssh传输文件的时候,你就要输入这个密码。为了避免麻烦,建议不用设置,直接回车。
Enter same passphrase again:
这就是让你再输入一次密码,就跟我们注册账号时候设置密码需要设置两次一样。上一步没设置密码,这里直接回车就可以了。到这里你的秘钥就设置好了,你会收到这段代码提示:
Your identification has been saved in /c/Users/…/.ssh/id_rsa
Your public key has been saved in /c/Users/…/.ssh/id_rsa.pub
还会向你展示你的秘钥长啥样

在这里插入图片描述

当你看到上面这段代码,那就说明你的 SSH key 已经创建成功,你可以再使用~/.ssh看一下,现在文件是真的存在了。

3.添加SSH Key到GitHub

setting里面添加即可

这里写图片描述

按照红框框里的路径,找到.ssh文件夹。用记事本打开id_rsa.pub文件,全选其中的内容粘贴到网页的Key中。

4.测试

在git Bash 中输入以下代码

$ ssh -T git@github.com

注意是git@github.com,不是你的邮箱。

然后会提示你:
The authenticity of host ‘github.com (13.229.188.59)’ can’t be established.
RSA key fingerprint is SHA256:nThbg6kXUp…
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入yes,回车

接下来就会提示你输入密码,如果上边设置ssh的时候,你没设置密码会提示你:
Warning: Permanently added ‘github.com,192.30.255.112’ (RSA) to the list of known hosts.
警告完了,如果你能看到如下提示,那你已经成功设置SSH密钥。
Hi “用户名”! You’ve successfully authenticated, but GitHub does not provide shell access.

完成连接!

Git准备

1.初始化仓库

git init

2.Git操作

git add .git commit

2.更新本地仓库并上传

git remote add origin <https>//设定上传地址

git pull origin master

git push -u origin master

*大文件处理

1.安装git lfs

(一个仓库里面执行一次就好了)

git lfs install

选择你让Git LFS 管理的文件

git lfs track "*.zip"git add .gitattributes

提交到GitHub

git add “Health”git commit -m "添加Health文件"

提交到远程仓库

git remote add origin XXXXXgit push -u origin master

七、举个例子

创建

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

$ mkdir learngit //创建一个名叫learngit的空目录

$ cd learngit //把learngit设置为当前目录

$ pwd //查看当前目录

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

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

$ git init

Initialized empty Git repository in /Users/Administrator/learngit/.git/

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

3.把文件添加到版本库

我们在 learngit 目录下编写一个 readme.txt 文件,内容如下:

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

(1) 用 git add 命令,把文件添加到仓库:

$ git add readme.txt

执行以上命令,没有任何显示。

(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

修改文件

我们已经成功添加并提交了一个 readme.txt 文件,继续修改 readme.txt 文件,改成如下内容:

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

运行 git status 命令:

$ git status //查看仓库当前的状态
On branch masterChanges 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")

如果我们想知道上次是怎么修改readme.txt 文件的,需要用 git diff 命令:

$ git diff readme.txt diff --git a/readme.txt b/readme.txtindex 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) git add

$ git add readme.txt

没有任何输出,这时候可以用 git status 查看一下当前仓库状态:

$ git status
On branch masterChanges to be committed: //将要被提交的文件包括 readme.txt  (use "git reset HEAD <file>..." to unstage)    
modified:   readme.txt

(2) git commit

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

再用 git status 查看一下当前仓库状态:

$ git status
On branch masternothing to commit, working tree clean
 //当前没有需要提交的修改,而且,工作目录是干净的。
有关git status 的状态问题(具体见原理部分)
1.改变
2.使用git add指令
3.使用git commit指令

版本回退

如果我们继续对 readme.txt 文件进行修改,改成如下内容:

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

然后添加并提交:

$ git add readme.txt
$ git commit -m "append GPL"[master 1094adb] append GPL 1 file changed, 1 insertion(+), 1 deletion(-)

到目前为止,readme.txt 文件一共有三个版本被提交到了 Git 仓库里,我们可以用 git log 命令进行查看:

$ git log //查看历史记录commit1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)Author: Michael Liao <askxuefeng@gmail.com>Date:   Fri May 18 21:06:15 2018 +0800    append GPLcommit e475afc93c209a690c39c13a46716e8fa000c366Author: Michael Liao <askxuefeng@gmail.com>Date:   Fri May 18 21:03:36 2018 +0800    add distributedcommit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0Author: Michael Liao <askxuefeng@gmail.com>Date:   Fri May 18 20:59:18 2018 +0800    wrote a readme file

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

git log --pretty=oneline1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPLe475afc93c209a690c39c13a46716e8fa000c366 add distributedeaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file 
//一大串数字是 commit id ,而且每个人的都不一样。

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

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

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

$ cat readme.txt //查看 readme.txt 文件的内容Git is a distributed version control system.Git is free software.

果然 readme.txt 文件返回到了上一个版本。

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

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

这时再查看一下 readme.txt 文件内容:

$ cat readme.txt

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

果然,又回到了最新的版本。

前面我们提到过,如果我们想把文件添加到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.

然后在工作区新建一个 LICENSE 文本文档(任意内容)

使用两次 git add 命令分别把 readme.txt 和 LICENSE 都添加后,可以用 git status 命令查看一下:

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

现在,暂存区的状态就变成这样了:

img

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

$ git commit -m "understand how stage works"

[master e43a48b] understand how stage works 2 files changed, 2 insertions(+) create mode 100644 LICENSE

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

$ git status
On branch masternothing to commit, working tree clean

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

管理修改

Git 如此的优秀是因为,Git 跟踪并管理的不是文件,而是修改。

我们对 readme.txt 文件进行修改:

$ cat readme.txt

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.Git tracks changes.

然后,添加:

$ git add readme.txt
$ git status

然后再修改 readme.txt 文件:

$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

提交:

$ git commit -m "git tracks changes"
[master 519219b] git tracks changes 1 file changed, 1 insertion(+)

这时候我们查看一下状态:

$ git status
On branch masterChanges 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.txtno changes added to commit (use "git add" and/or "git commit -a")

我们可以发现,第二次修改并没有被提交。

因为在工作区的第一次修改被放入暂存区,准备提交;而在工作区的第二次修改并没有被放入暂存区,所以, git commit 命令只负责把暂存区的修改提交了。

提交后,我们可以用 git diff HEAD – readme.txt 命令去查看工作区和版本库里面最新版本的区别:

$ git diff HEAD -- readme.txt diff --git a/readme.txt b/readme.txtindex 76d770f..a9c5755 100644--- a/readme.txt+++ b/readme.txt@@ -1,4 +1,4 @@ Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage.-Git tracks changes.+Git tracks changes of files.

这个案例说明一个问题那就是在其中在暂存区的东西才能被提交

撤销修改

假如说你在 readme.txt 文件中添加了一行内容如下:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.My stupid boss still prefers SVN.

最后一行是万万不能让BOSS看到的,应该怎么撤销呢?

(1) 没有 git add 之前

可以手动删除最后一行,手动把文件恢复到上一个版本的状态。然后再用 git checkout – file 命令丢弃工作区的修改:

$ git checkout -- readme.txt //把readme.txt文件在工作区的修改全部撤销。

现在看一下 readme.txt 文件内容:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.Git tracks changes of files.

果然复原了。

(2) git add了,但没有git commit

这时候的修改添加到了暂存区,但没有提交到分支,用 git status 查看一下:

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

这时候我们可以使用 git reset HEAD file 命令把把暂存区的修改撤销掉,重新放回工作区:

$ git reset HEAD readme.txt //git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,HEAD表示最新版本。Unstaged changes after reset:M    readme.txt

现在再用 git status 查看一下:

$ git status
On branch masterChanges 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 //暂存区是干净的,工作区有修改。

这时候再丢弃工作区的修改就OK了:

$ git checkout -- readme.txt //丢弃工作区的修改。

$ git statusOn branch masternothing to commit, working tree clean

终于大功告成了。

(3) 既 git add 了,也 git commit 了

可以回退到上一个版本,见回退版本内容。

git add readme.txt  //文件添加到仓库
git commit -m "wrote a readme file"//文件提交到仓库,在向Git上传的时候需要有两步命令add与commit
git status //查看仓库当前的状态,这个可以查看修改与否,到不能看具体改了没有
git diff readme.txt //这一步是用来在更改之后没有提交的时候查看改变了什么的命令 
git log //查看历史版本更改记录
git log --pretty=oneline  //获取commit id
git reset --hard HEAD^  //前推版本
git reset --hard 1094a   //还原版本

总结

如何使用Git上传至GitHub

首先需要连接ssh,连接了本地与GitHub账户,使用其上述命令进行测试确定连接成功(六)
初始化本地仓库,更新并提交本地仓库(三)
更改gitignore,添加origin地址,更改上传属性解决一些报错,将本地仓库上传GitHub,成功上传分支将本地仓库上传GitHub//注意私有项目需输入密码(三、六)
这样就上传至GitHub上了但上传的是master,使用上传分支的方法重写上传分支至所需的位置即可(五)

指令

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

$ ssh-keygen -t rsa -C "X@qq.com"
$ ssh -T git@github.com

git init
git clone https:XXXXXXXXX
git status

git add .
git commit -m "添加XXX文件"

git config http.postBuffer 524288000
git config --global http.sslVerify "false"//使用GitHub调整配置

git remote rm origin
git remote add origin XXXXXX
git pull origin master
git push -u origin master -f //这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候
git push -u origin master

git branch //本地分支
git branch -r //远程分支

git branch XXXX   //创建分支
git checkout XXXX //切换分支
git add .
git commit
git push -u origin XXXX

git merge XXXXX  //合并指定分支到当前分支
git branch -d XXXX//删除分支
git push origin --delete XXXXX
git branch -dr XXXXX

更新(2021.8.13之后)
//更改url
git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git

//使用令牌远程克隆
git clone https://<TOKEN>@github.com/<user_name>/<repo_name>.git

资料来源:Git教程(完整)

b站-遇见狂神说

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值