Git如何上传到码云,git详细介绍以及使用(内含实操代码

Git

https://help.coding.net/docs/host/browsing.html

此视频为笔记:

AV24441039

AV98007542

两个视频都各有优点,形成互补,个人感觉git需要学的还很多

 

此视频内容已全部试验过代码,内附带自己敲写代码

部分由于条件限制没有敲写

 

本博客非错误问题将不再修改,但作为笔记将不断延伸,新建了一个git仓库进行同步更新:

仓库地址:https://gitee.com/han_shaokang/git_notes.git

 

Git理论

 

Git拥有的功能

 

协同修改:
    多人并行不悖的修改服务器端的同一个文件
数据备份:
    不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态
    
版本管理
    在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面SVN采用的是增量式管理的方式,而Git采取了文件系统快照的方式。
    
权限控制
    对团队中参与开发的人员进行权限控制。
    对团队外开发者贡献的代码进行审核---git独有
​
历史记录:
    查看修改人,修改时间,修改内容,日志信息。
    将本地文件恢复到某一个历史状态
    
分支管理
    允许开发团队在工作中多条生产线同时推进任务,进一步提高效率

 

Git优势

 

大部分在本地完成,不需要联网
完整性保证
尽可能添加数据而不是删除或修改数据
分支操作非常快捷流畅(内部用快照的方式
与Linux命令全面兼容

 

Git官方命令:

点击查看git全部命令

https://gitee.com/all-about-git

版本控制概念

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
​
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
实现跨区域多人协同开发
追踪和记载一个或者多个文件的历史记录
组织和保护你的源代码和文档
统计工作量
并行开发、提高开发效率
跟踪记录整个软件的开发过程
减轻开发人员的负担,节省时间,同时降低人为错误
简单说就是用于管理多人协同开发项目的技术。
没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。
​
多人开发必须用要版本控制,否则到时候上线可能导致部分代码不能用

 

主流版本控制工具:

Git;SVN;CVS;VSS;TFS;Visual Studio Online等等

 

三种版本控制:

1.本地版本控制:

本地版本控制系统是通过使用简单的数据库保存文件的所有变更。

记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。

Git如何上传到码云,git详细介绍以及使用(内含实操代码

2.集中式版本控制系统

 有一个包含文件所有修订版本的单一服务器,大家将自己的文件都统一的放在一个服务器多个客户端可以从这个服务器同步更新或上传自己的修改

所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、(多用svn)CVS、VSS,subversion以及perforce

单点故障:服务器宕机,历史数据丢失,只剩下当前用户版本

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

3、分布式版本控制 Git

避免了单点故障

每个人都拥有全部的代码,所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。

由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况!用户可以带着代码跑路了=·=

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

Git与SVN的主要区别

 

SVN是集中式版本控制系统,版本库是集中放在*服务器的,而工作的时候,用的都是自己的电脑,所以首先要从*服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到*服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
​
增量式存储数据,节约服务器空间,只保存有改变的数据,使用时候全部拿出来拼接

 

Git是分布式版本控制系统,没有*服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!
​
快照流,存储数据,重复的保存成指针指向原来的数据

 

Git基本理论

 

Git本地的三个工作区域:

你git add存在暂存区还可以直接撤销,commit添加到本地库就不行了,需要另外的操作,下面会讲解 Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

 

 

工作目录(Working Directory):
​
工作区,就是你平时存放项目代码的地方
​
暂存区(Stage/Index):
用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,用于临时存储
​
资源库(Repository或Git Directory):
仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
​
--
远程的git仓库(Remote Directory):
如果就可以分为四个工作区域。
托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

 

文件在这四个区域之间的转换关系如下:

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

其他文件

Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
​
WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
​
.git:存放Git管理信息的目录,初始化仓库的时候自动创建。
​
Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
​
Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
​
Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。
​

 

Git底层原理

 

git底层是哈希算法,利用其特性保证下载来的数据时具有完整性的

哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:
​
1.不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
​
2.哈希算法确定,输入数据确定,输出数据能够保证不变
​
3.哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
​
4.哈希算法不可逆

 

Git基础配置操作

 

Git软件下载

 

下载时候按照自己操作系统下载
​
1.官网下载:外网下载速度慢
https://git-scm.com/ 
​
2.淘宝镜像下载:推荐
http://npm.taobao.org/mirrors/git-for-windows/

 

下载方法:

1.官网下载

https://blog.csdn.net/hyacinth_han/article/details/80473762

2.淘宝镜像下载:

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

git安装

 

跟国内的流氓软件不一样,傻瓜式安装即可,全部next就可以

 

git安装后增加功能

 

左边点击开始会出现三个与git有关功能:
​
Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

 

同时在任何地方点击鼠标右键出现下面界面,点击进入git

原因:

在进行exe文件安装时为你自动配置了环境变量path:D:\work\git\anzhuang\Git\cmd,就和java的jdk一样

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

git中使用Linux基本命令:

git里面可以使用Linux命令

1)、cd : 改变目录。
2)、cd .. : 回退到上一个目录,直接cd进入默认目录
3)、pwd : 显示当前所在的目录路径。
4)、ls(ll):  都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。
5)、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。
6)、rm:  删除一个文件, rm index.js 就会把index.js文件删除。
7)、mkdir:  新建一个目录,就是新建一个文件夹。
8)、rm -r :  删除一个文件夹, rm -r src 删除src目录
9)、mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。
10)、reset 重新初始化终端/清屏。
11)、clear 清屏。 快捷键ctrl+L
12)、history 查看命令历史。
13)、help 帮助。
14)、exit 退出。
15)、#表示注释

 

git配置

git配置文件都保存在本地

 

查看不同级别的配置文件:

查看用户配置
git config -l
相关配置文件位置:
​
查看系统config
git config --system --list
相关配置文件位置:Git\etc\gitconfig  :Git 安装目录下的 gitconfig
​
查看当前用户(global)配置
git config --global --list
相关配置文件位置:C:\Users\Administrator\ .gitconfig    只适用于当前登录用户的配置(必须等你设置用户名邮箱后才会有

 

设置用户名和邮箱(必要标识

 

设置签名:

签名区分不同开发人员身份
​
这里设置的东西和登录远程库(代码托管中心)的账号密码没有关系
​
每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中

 

项目级别:
仅在当前本地库范围内生效
​
系统级别:
登录当前操作系统用户范围
​
优先级:
如果都有则项目级别先生效
不允许二者都没有

 

设置方法:

打开你的git页面(右键点击Git Bash Here)

二者选一个
​
项目级别:
git config user.name "xiaolang"  #名称
git config user.email [email protected]   #邮箱
​
​
系统用户级别:
git config --global user.name "xiaolang"  #名称
git config --global user.email [email protected]   #邮箱

 

设置git签名并查看存储信息

[email protected] MINGW64 /d/work/git/gitrepository/openclass (master)
$ git config user.name "xiaolang"
​
[email protected] MINGW64 /d/work/git/gitrepository/openclass (master)
$ git config user.email [email protected][email protected] MINGW64 /d/work/git/gitrepository/openclass (master)
$ pwd
/d/work/git/gitrepository/openclass
​
[email protected] MINGW64 /d/work/git/gitrepository/openclass (master)
​
[email protected] MINGW64 /d/work/git/gitrepository/openclass (master)
$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = https://gitee.com/kuangstudy/openclass.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[user]
        name = xiaolang
​

 

查看全局的文件:

$ cat ~/.gitconfig
[user]
        name = xiaolang
        email = [email protected]

 

初始化仓库

先使用命令初始化一个目录
git init
​
或者进入一个已有目录
在.git等级目录下使用设置签名

 

Git和代码托管中心

局域网环境下
    GitLab服务器
​
外网环境下:
    GitHub
    码云

 

代码托管中心:用来维护远程库

 

git工作流程(命令

 

git的工作流程一般是

1、在工作目录中添加、修改文件;
​
2、将需要进行版本管理的文件放入暂存区域;
​
3、将暂存区域的文件提交到git仓库。

 

git管理的文件有三种状态

已修改(modified)
已暂存(staged)
已提交(committed)

 

 

 

Git项目搭建

 

创建工作目录与常用指令(与在文件中保存情况

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

 

1.本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

 

1、创建全新的仓库,需要用GIT管理的项目的根目录执行:

在当前目录新建一个Git代码库
在自己想要创建的地方(不要有中文字符),右键进入git。
然后执行初始化命令
​
$ git init
​

 

2.执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。

 

2.克隆远程仓库

1、是将远程服务器上的仓库完全镜像一份至本地
​
# 克隆一个项目和它的整个代码历史(版本信息)
git clone [url]  
如:git clone https://gitee.com/kuangstudy/openclass.git
​
2、去 gitee 或者 github 上克隆一个测试
​

 

图解:

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

克隆该地址,在自己仓库使用命令:

git clone https://gitee.com/kuangstudy/openclass.git

图中地址:https://gitee.com/kuangstudy/openclass

 

Git文件操作:

文件的四种状态:
​
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
​
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
​
Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
​
Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
​
Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
​

 

查看文件状态

#查看指定文件状态
git status [filename]
​
#查看所有文件状态
git status
​
# git add .                  添加所有文件到暂存区
# git commit -m "消息内容"    提交暂存区中的内容到本地仓库 -m 提交信息
​

 

Git是目前世界上最先进的分布式版本控制系统。

Git可以直接看到每次更新了哪些代码和文件

Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper

 

Git使用流程(干货

 

Git命令:

 

多屏控制方式:

空格向下翻页

b 向上翻页

q退出

 

Linux命令

ll|less
ls -lA|less  显示隐藏文件
​
:set nu    显示行号(在vim编辑器下
i      在vim编辑器下进入编辑
按esc再:wq退出并保存
查看时候如果行数太多就按空格键向下翻
tail -n 3 good.txt  显示该文件最后三行
ctrl+L清屏

 

Git命令

查看自己分支
git status
git add good.txt:将该文件加入到暂存区
git add .:将所有文件加入到暂存区
git rm --cached good.txt:从缓存区移除,重新变为未追踪文件
 
 git commit - m "my message" good.txt 提交时候不进入vim编辑器直接输入提交
 
 git log 查看原来版本
 git log --pretty=oneline  :以一个漂亮的方式(oneline)去查看原来版本
 git log --oneline   哈希值选一部分来显示  只能显示之前的版本
 git reflog  显示出到哪个版本需要移动几步(比较好) 显示所有版本
 git reset --hard 570984a  回到该版本,570984a为版本的索引值
 
 reset --hard HEAD^  :只能回退版本,^符号一个就回退一个,回退两个就写两个,但是回退很多步就用到下面的命令
git reset --hard HEAD~3  :回退3步,回退几步就写几
​
reset有三个命令,详情向下翻
​
git diff a1.txt   //查看a1修改后的不同(工作区和暂存区文件的比较)
git diff HEAD^  a1.txt //将工作区文件和本地库历史记录比较;不加文件名为比较所有不同的文件
​
git branch -v  //查看分支
git branch hot_fix //创建新的分支hot_fix,名字随便取
git checkout master //切换到分支:master
git merge hot_fix  //执行合并命令
​
git push origin mastergit remote add origin https://gitee.com/han_shaokang/myfirst.git
git push origin master
​
git remote add test https://gitee.com/han_shaokang/myfirst.git  #git remote add 远程仓储名名称唯一即可  远程仓储地址
​
//推送之前先执行这个起别名的操作
1.git remote  -v  # 查看关联的所有的远程仓储名称及地址的别名
2.git remote add origin https://gitee.com/han_shaokang/myfirst.git  //为该仓库起别名,以后就可以用origin代替这一串地址
​
git remote  #查看所有的远程仓储名称
​
git clone https://gitee.com/han_shaokang/shangguigu.git   //克隆,后面跟仓库地址
​
pull //fetch+marge
 git fetch origin master
 //抓取操作,将远程仓库文件下载下来,但是并没有改变本地区文件
git merge origin/master  //将远程分支合并到本地分支

 

1.工作区 ---> 暂存区 ---> 本地库

 

在此之前,你应该先初始化一个仓库,并为其添加必要标识;或者去clone一个新的仓库

 

$ vim good.txt  //创建一个文件
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git status//获取状态
On branch master
​
No commits yet//没有任何提交的东西
​
Untracked files:
  (use "git add <file>..." to include in what will be committed)//我可以使用这个命令来提交到暂存区
        good.txt//可以提交的文件列表:这里只有一个
​
nothing added to commit but untracked files present (use "git add" to track)//没有任何东西在暂存区,但是存在未追踪的文件,我为可以按照这个命令去追踪他
​
$ git add good.txt
warning: LF will be replaced by CRLF in good.txt.//这个文件中LF将被替换为CRLF(行末换行符转换方式,在安装时候可以设置
The file will have its original line endings in your working directory
​
$ git status
On branch master
​
No commits yet
​
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)//这个文件在暂存区,可以使用该命令把文件移除暂存区,将该文件变为未追踪文件
        new file:   good.txt
//提交进入下面页面
$ git commit
//之后在vim编辑器下输入自己要输入的信息
//:set nu
//i
//输入信息
//esc
//:wq
[master (root-commit) 570984a] my first commit new file is good.txt//我们输入的提交信息
 1 file changed, 1 insertion(+)//一个文件修改了,增加了一行
 create mode 100644 good.txt
​

 

该页面在vim百年及其

# Please enter the commit message for your changes. Lines starting//对于这次修改输入你提交的消息
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
#       new file:   good.txt
​

 

修改good.txt文件后

$ vim good.txt
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git status
On branch 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:   good.txt
​
no changes added to commit (use "git add" and/or "git commit -a")//你可以add或者直接commit;和新建的时候不一样,新建的时候只能先add,再去commit
//简单的提交方式:
 git commit - m "my message" good.txt

 

如果太多按空格键向下翻

$ git log
commit 4d2558a983caf81ef40a58e63cbb07ec85ccf33e (HEAD -> master)//前面为哈希值,HEAD是一个指针指向当前版本
Author: xiaolang <[email protected]>
Date:   Wed Jul 22 16:12:09 2020 +0800
​
    skh
​
commit 570984a821f637d326b17d99ec0dcd17f32cc229
Author: xiaolang <[email protected]>
Date:   Wed Jul 22 15:56:32 2020 +0800//提交时间
​
    my first commit new file is good.txt//提交日志信息
​

 

$ git log --pretty=oneline//以一个漂亮的方式(oneline)去查看原来版本
4d2558a983caf81ef40a58e63cbb07ec85ccf33e (HEAD -> master) skh
570984a821f637d326b17d99ec0dcd17f32cc229 my first commit new file is good.txt

 

2.版本的前进与后退

本质为HEAD指针的变化

HEAD指针指的是离我们最近的版本

选中hash值系统自动复制

基于索引值操作(推荐
使用^符号  :只能向回退
使用~符号  :

 

$ git reflog
4d2558a (HEAD -> master) [email protected]{0}: commit: skh
570984a [email protected]{1}: commit (initial): my first commit new file is good.txt
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git reset --hard 570984a//输入其哈希值
​
  [email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git reset --hard 570984a
HEAD is now at 570984a my first commit new file is good.txt //到达该版本

 

其他回退前进方式:
​
reset --hard HEAD^  :只能回退版本,^符号一个就回退一个,回退两个就写两个,但是回退很多步就用到下面的命令
​
git reset --hard HEAD~3  :回退3步,回退几步就写几

 

3.reset的三个参数

 

--soft参数:
    仅仅在本地移动HEAD指针
    
--mixed参数
    在本地库移动HEAD指针
    重置暂存区
​
--hard参数
    在本地库移动HEAD指针
    重置暂存区
    重置工作区

 

--soft
只有本地库指针移动了
soft相当于撤销了commit命令
​
--mixed
本地库和暂存区都移动了,工作区不移动,就显得工作区内文件移动了一样
相当于撤销了add和commit命令
​
--hard
一起动

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

 

 

 

 

4.删除文件(回退找回

一般是删除提交到本地库里的文件

 

先创建一个文件

$ vim o.txt
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git add o.txt
warning: LF will be replaced by CRLF in o.txt.
The file will have its original line endings in your working directory
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git commit -m "abc" o.txt
warning: LF will be replaced by CRLF in o.txt.
The file will have its original line endings in your working directory
[master 84312cb] abc
 1 file changed, 1 insertion(+)
 create mode 100644 o.txt

 

删除本地库文件

和添加文件差不多

[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ rm o.txt//先提交删除请求,这时候本地就会删除,如果要仓库删除需要去提交该次删除请求
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ ll
total 4
-rw-r--r-- 1 71507 197609 10  7月 24 18:27 aaa.txt
-rw-r--r-- 1 71507 197609  7  7月 24 18:28 bbb.tx
-rw-r--r-- 1 71507 197609  8  7月 24 18:32 ccc.txt
-rw-r--r-- 1 71507 197609 42  7月 24 18:22 good.txt
drwxr-xr-x 1 71507 197609  0  7月 22 15:12 work1/
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    o.txt
​
no changes added to commit (use "git add" and/or "git commit -a")
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git add .//将删除文件数据添加到暂存区
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git commit -m "sahcnhu a.txt" o.txt//提交删除请求
[master 7d9f01e] sahcnhu a.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 o.txt
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git status
On branch master
nothing to commit, working tree clean
​

 

删除也会进行一次记录

如果想回退则:

$ git reflog
7d9f01e (HEAD -> master) [email protected]{0}: commit: sahcnhu a.txt
84312cb [email protected]{1}: commit: abc
8ee8e35 [email protected]{2}: commit: disanci
6136f32 [email protected]{3}: commit: dierci
c481400 [email protected]{4}: commit: 2
4d2558a [email protected]{5}: reset: moving to 4d2558a
570984a [email protected]{6}: reset: moving to 570984a
4d2558a [email protected]{7}: reset: moving to HEAD
4d2558a [email protected]{8}: commit: skh
570984a [email protected]{9}: commit (initial): my first commit new file is good.txt
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git reset --hard 84312cb
HEAD is now at 84312cb abc
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git reflog
84312cb (HEAD -> master) [email protected]{0}: reset: moving to 84312cb
7d9f01e [email protected]{1}: commit: sahcnhu a.txt
84312cb (HEAD -> master) [email protected]{2}: commit: abc
8ee8e35 [email protected]{3}: commit: disanci
6136f32 [email protected]{4}: commit: dierci
c481400 [email protected]{5}: commit: 2
4d2558a [email protected]{6}: reset: moving to 4d2558a
570984a [email protected]{7}: reset: moving to 570984a
4d2558a [email protected]{8}: reset: moving to HEAD
4d2558a [email protected]{9}: commit: skh
570984a [email protected]{10}: commit (initial): my first commit new file is good.txt
​

 

5.修改文件(文件比较

[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ vim a1.txt//修改存到暂存区的文件a1.txt
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git diff a1.txt//查看a1.txt的不同(工作区和暂存区文件的比较)不带文件名比较全部文件
warning: LF will be replaced by CRLF in a1.txt.
The file will have its original line endings in your working directory
diff --git a/a1.txt b/a1.txt
index d1255f2..e237c37 100644
--- a/a1.txt
+++ b/a1.txt
@@ -1,4 +1,4 @@
 aaa
-bbb
 ccc
-dddd
+d
+eeeee
​
​
//和上一个版本比较;加上文件名指定比较某一个文件,不加则比较全部
$ git diff HEAD^
warning: LF will be replaced by CRLF in a1.txt.
The file will have its original line endings in your working directory
diff --git a/a1.txt b/a1.txt
new file mode 100644
index 0000000..e237c37
--- /dev/null
+++ b/a1.txt
@@ -0,0 +1,4 @@
+aaa
+ccc
+d
+eeeee
diff --git a/a2.txt b/a2.txt
new file mode 100644
index 0000000..4c74a9c
--- /dev/null
+++ b/a2.txt
@@ -0,0 +1,4 @@
+aaa
+bb
+ccc
+ddd
​

 

 

Git分支

 

本地创建分支并推送到远程库:

https://www.cnblogs.com/silencey/p/10794784.html

 

分支介绍

使用多条线同时推进多个任务

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

分支好处:
同时并行开发,提高效率
如果某一分支开发失败不会影响其他分支,减少出错


 

[email protected] MINGW64 /d/work/git/gitrepository/test (master)//在master分支
$ git status
On branch master//现在在主分支上
nothing to commit, working tree clean
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git branch -v//查看分支
* master 727fa3b xiugai a1.txt//只有master一个分支

创建新的分支

[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git branch hot_fix  //创建新的分支
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git branch -v     //查看分支,有两个
  hot_fix 727fa3b xiugai a1.txt
* master  727fa3b xiugai a1.txt
​

切换分支

[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git checkout hot_fix//切换分支
Switched to branch 'hot_fix'
​
[email protected] MINGW64 /d/work/git/gitrepository/test (hot_fix)
$ git branch//查看分支
* hot_fix
  master
​

 

分支合并

1.必须在接收修改(增加新内容)的分支上,如我的hot_fix将bug修复想让master分支生效,那我就要先进入master分支

2.执行合并命令git merge hot_fix

 

[email protected] MINGW64 /d/work/git/gitrepository/test (hot_fix)
$ git checkout master //切换到主分支
Switched to branch 'master'
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git merge hot_fix  //执行合并命令
Updating 727fa3b..e1fda7d
Fast-forward
 a2.txt | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
​

分支冲突

当主分支和其他分支都修改同一个文件时候就会产生分支冲突

svn合并会产生新的文件,git没有

[email protected] MINGW64 /d/work/git/gitrepository/test (master|MERGING): (master|MERGING)表示正处于合并状态

[email protected] MINGW64 /d/work/git/gitrepository/test (hot_fix)
$ git checkout master  //切换到主分支
Switched to branch 'master'
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git merge hot_fix  //将hot_fix切换到主分支
Auto-merging aaa.txt
CONFLICT (content): Merge conflict in aaa.txt//冲突文件名字
Automatic merge failed; fix conflicts and then commit the result.
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master|MERGING)//此时是出于合并状态
$ vim aaa.txt   //修改冲文件
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master|MERGING)
$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)
​
Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   aaa.txt
​
no changes added to commit (use "git add" and/or "git commit -a")
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master|MERGING)
$ git add .  //提交
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master|MERGING)
$ git commit -m "tijiaofenzhihebing"  //这里不可以写提交文件名字
[master f142b93] tijiaofenzhihebing
​

 

打开冲突文件

  1 <<<<<<< HEAD
  2 master
  3 master
  4 master
  5 master
  6 =======//前面是HEAD的,下面是hot_fix的
  7 hot fix
  8 hot fix
  9 hot fix
 10 hot fix
 11 >>>>>>> hot_fix
​

 

 

 

 

 

使用码云:

 

1.注册账号/完善信息:

去官网注册:

https://gitee.com/signup

 

申请账号:

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

完善一下自己的个人信息:

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

注册完账号可以在界面看到 git大全

 

2.设置本机绑定SSH公钥,实现免密码登录

免密码登录,码云是远程仓库,我们是平时工作在本地仓库

 

先进入家目录:

cd ~


 

再在git页面生成公钥

1. ssh-******

2.ssh-****** -t rsa -C [email protected]
-t rsa是加密用的

使用:
进入git页面输入
ssh-****** -t rsa -C [email protected]
之后一直点确认即可
之后会生成C:\Users\71507\.ssh目录,其中存放一个公钥一个私钥:
.pub结尾的文件为公钥
复制到自己的码云上即可

之后起别名
git remote add 别名 仓库地址
之后往仓库放东西: git push 别名 master

 

 

3.使用码云创建一个自己的仓库:

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

 

许可证:开源是否可以随意转载,开源但是不能商业使用,不能转载,... 限制!

 

 

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

Git如何上传到码云,git详细介绍以及使用(内含实操代码

上传到码云

 

创建到仓库时候gitee的提示

简易的命令行入门教程: 
Git 全局设置:
git config --global user.name "韩少康"
git config --global user.email "[email protected]"
  
创建 git 仓库:
mkdir shangguigu
cd shangguigu
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/han_shaokang/shangguigu.git
git push -u origin master
​
已有仓库?
cd existing_git_repo
git remote add origin https://gitee.com/han_shaokang/shangguigu.git
git push -u origin master

 

1.自己上传:

[email protected] MINGW64 /d/work/git/gitrepository
$ pwd
/d/work/git/gitrepository
​
[email protected] MINGW64 /d/work/git/gitrepository
$ mkdir shicao_git
​
[email protected] MINGW64 /d/work/git/gitrepository
$ cd shicao_git/
​
[email protected] MINGW64 /d/work/git/gitrepository/shicao_git
$ git init
Initialized empty Git repository in D:/work/git/gitrepository/shicao_git/.git/
​
[email protected] MINGW64 /d/work/git/gitrepository/shicao_git (master)
$ vim first
​
[email protected] MINGW64 /d/work/git/gitrepository/shicao_git (master)
$ git add .
warning: LF will be replaced by CRLF in first.
The file will have its original line endings in your working directory
​
[email protected] MINGW64 /d/work/git/gitrepository/shicao_git (master)
$ git commit -m "7yue 25ri"
[master (root-commit) 8a0a568] 7yue 25ri
 1 file changed, 3 insertions(+)
 create mode 100644 first
​
[email protected] MINGW64 /d/work/git/gitrepository/shicao_git (master)
$ git remote add origin https://gitee.com/han_shaokang/shangguigu.git
​
[email protected] MINGW64 /d/work/git/gitrepository/shicao_git (master)
$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 270 bytes | 270.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/han_shaokang/shangguigu.git
 * [new branch]      master -> master//本地master分支到网上master
Branch 'master' set up to track remote branch 'master' from 'origin'.
​

 

 

​
//推送之前先执行这个起别名的操作
1.git remote  -v  # 查看关联的所有的远程仓储名称及地址的别名
2.git remote add origin https://gitee.com/han_shaokang/myfirst.git  //为该仓库起别名,以后就可以用origin代替这一串地址

 

2.其他人克隆下载(邀请他人加入团队

三个效果:

1.完整的远程库下载到本地

2.替我们创建origin远程地址别名

3.初始化本地库

[email protected] MINGW64 /d/work/git/gitrepository/shicao_git (master)
$ cd ..   //先退出这个目录
​
[email protected] MINGW64 /d/work/git/gitrepository
$ ll
total 16
drwxr-xr-x 1 71507 197609 0  7月 20 23:18 openclass/
drwxr-xr-x 1 71507 197609 0  7月 25 21:57 shicao_git/
drwxr-xr-x 1 71507 197609 0  7月 25 00:33 test/
drwxr-xr-x 1 71507 197609 0  7月 25 00:46 test002/
drwxr-xr-x 1 71507 197609 0  7月 21 07:54 下载/
​
[email protected] MINGW64 /d/work/git/gitrepository
$ mkdir yaoqing_xiaolang  //新建一个目录
​
[email protected] MINGW64 /d/work/git/gitrepository
$ cd yaoqing_xiaolang/   //进入目录
​
[email protected] MINGW64 /d/work/git/gitrepository/yaoqing_xiaolang
$ git clone https://gitee.com/han_shaokang/shangguigu.git
//克隆,后面跟仓库地址
Cloning into 'shangguigu'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
​

3.邀请加入团队

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

如果是github会有一个链接可以复制,你复制下来传给要加入的用户,他登录自己github账号后打开这个链接就可以出现加入页面

 

远程库下载合并

git pull origin master //fetch+marge
  
 git fetch origin master
 //抓取操作,将远程仓库文件下载下来,但是并没有改变本地区文件
git merge origin/master  //将远程分支合并到本地分支

 

下载比较简单,不会产生冲突用pull

上传容易产生冲突使用fetch+marge

 

[email protected] MINGW64 /d/work/git/gitrepository/shicao_git (master)
$ git fetch origin master  //抓取远程库
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 253 bytes | 42.00 KiB/s, done.
From https://gitee.com/han_shaokang/shangguigu
 * branch            master     -> FETCH_HEAD
   8a0a568..f42acf2  master     -> origin/master
​
[email protected] MINGW64 /d/work/git/gitrepository/shicao_git (master)
$ git checkout master
Already on 'master'
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
​
[email protected] MINGW64 /d/work/git/gitrepository/shicao_git (master)
$ git merge origin/master  //将远程库合并到本地
Updating 8a0a568..f42acf2
Fast-forward
 first => first1 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename first => first1 (100%)
​

 

协同开发冲突:

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

两个人同时更改了一个文件,只有第一个人可以上传上去,第二个会产生冲突,此时第二个人相当于落后第一个人一个版本

 

此时我们第二个人必须要先拿到最新版本:

git put origin master

此时会进入冲突状态(按照分支冲突进行操作即可

此时使用vim命令编辑冲突文件

然后和分支冲突解决一样了

vim a.txt

git add a.txt

git commit -m "yonghuchonggtu" //这里是不加文件名的提交

git push origin master

 

跨团队协同开发

https://blog.csdn.net/qq_43615903/article/details/104859402

 

东方不败是另一个团队,他先复制一个远程库,在其中修改不会影响岳不群的远程库,等开发没问题后,岳不群再进行审核对其进行合并

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

被拜托方

复制过来仓库地址点击fok

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

fok后:

 

之后 git clone 当前fok地址就可以用了

Git如何上传到码云,git详细介绍以及使用(内含实操代码

之后项目完成好后给他发过去完成的

先点击pull requests在点击new pull request再点击create pullrequest

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

之后给其添加标题与内容(之后点击

create pull request

 

接收方

此时接收方也是点击 pull request

 

点击merge pull request进行合并

点击confirm merge确认合并

 

网上查找的资源

 

上传:

https://www.cnblogs.com/heike470/p/12490370.html

上传密码出错:

https://blog.csdn.net/weixin_34356555/article/details/92342883

 

上传出错,原因:gitee上的README.md文件不在本地代码目录中

https://www.cnblogs.com/yiduobaozhiblog1/p/9125465.html

 

[email protected] MINGW64 /d/work/git/gitrepository/test (master)
  //连接码云仓库,下面链接为仓库链接
$ git remote add origin https://gitee.com/han_shaokang/myfirst.git
fatal: remote origin already exists.
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git push origin master //push到远程仓库
To https://gitee.com/han_shaokang/myfirst.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://gitee.com/han_shaokang/myfirst.git'//出错,因为没github中的README.md文件不在本地代码目录中
  //解决方法https://zhidao.baidu.com/question/520358893388315405.html
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git status
On branch master
nothing to commit, working tree clean
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
$ git pull --rebase origin master
From https://gitee.com/han_shaokang/myfirst
 * branch            master     -> FETCH_HEAD
error: could not apply b08ccfa... hot fix
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply b08ccfa... hot fix
Auto-merging aaa.txt
CONFLICT (content): Merge conflict in aaa.txt
​

 

扩展:

https://www.cnblogs.com/chenjunjie12321/p/6876220.html

 

Eclipse操作

 

新建一个git本地库

1.New->Team ->Share Project->git

2.点击Use or create repository...

3.选中方框内工程,点击create repository

4.完成



设置本地库范围内签名

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

 

忽略文件

调出来Navigator视图可以看到所有要提交的文件,包括隐藏文件

 

新建忽略文件:

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

加到目录:

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

 

添加到远程库:

文件

显示+号表示已经被追踪了

显示*号表示已经被暂存了

显示?表示尚未追踪

显示圆柱体表示已经在本地库了

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

提交:

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

添加提交信息提交到本地库:

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

推送到远程库

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

点击 Add All Branches Spec//将所有分支推送到远程库

点击Finish

执行成功:

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

从远程库下载:

Oxygen Eclipse克隆工程操作:(高版本

 

1.右键import一个工程

2.选择Git里面的Projects from Git

3.下个界面点击Clone URL

4.将仓库地址粘贴过来,输入账号密码

5.更改目录:换成我们经常使用的Eclipse目录,便于管理

6.选择import as general project作为一个普通的工程区导入

7.此时工程已经创建完成。将该工程改为Eclipse能够识别的工程:右键项目->Configure->Convert to Maven Project

 

Kepler Eclipse克隆工程操作:(低版本

问题:不能保存到Eclipse工作区,不能换目录

上面的第五步保存为Eclipse工作区以外的目录

 

Eclipse冲突实例

先pull下来,进入冲突状态,再改文件

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

点击可以分成两个窗口进行对比,左边窗口可以改,右边只能复制内容

ctrl+shift+3调出界面,先add再commit再push

 


 

具体操作:

新建分支hot_fix:Team->Switch To ->New Branch

在hot_fix上修改,之后推送:Team->Reposetory->push to Branch in remote(这时候推送的是hot_fix分支)

 

另一个人:

pull过来;切换到hot_fix分支:Team->Switch->Other->

点击hot_fix分支,然后点击Check out New Local Branch

 

合并分支:

切换到master分支:Team->Switch->master

合并:team->merge

这时选择本地hot_fix,因为远程的已经下载到本地了

合并完就可以add,commit,push了

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

 

idea操作

 

Git如何上传到码云,git详细介绍以及使用(内含实操代码

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

 

或者不用上面两张图片直接,git init ,其余跟上面一样,也是git add . ;git commit -m " jjjjjj" ; 之后git push -u origin master上传到本地库(前提是开启了ssh验证,且本地有账号密码验证过)

 

分支提交:

https://www.jianshu.com/p/dd864fcee643

https://www.cnblogs.com/beichenroot/p/11043629.html

操作的基础步骤:

https://blog.csdn.net/jmkweb/article/details/92399772

 

idea忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立".gitignore"文件,此文件有如下规则:

1.忽略文件中的空行或以井号(#)开始的行将会被忽略。
2.可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
3.如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
4.如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
5.如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。


 

#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt



 

 

解析如何使用

https://www.cnblogs.com/suizhikuo/p/9804864.html

文件本身:

https://www.cnblogs.com/BonnieWss/p/11541748.html

 

分类

 

集中式工作流

 

GitFlow工作流

develop的版本要和master保持一致

 

 

ForKing工作流

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

GitLab服务器搭建过程:

暂时没有学到,无法总结,原因:电脑

 

需要在Linux环境下去安装(os7以上

在虚拟机上安装linux操作系统(AV24441039的第57集

安装:https://www.zhihu.com/question/354443004

首页:https://www.about.gitlab.com/

安装说明:https://www.about.gitlab.com/installation/

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

调整后安装:

ce和ee区别开

Git如何上传到码云,git详细介绍以及使用(内含实操代码

 

错误:

 

1.https://blog.csdn.net/qq_42469247/article/details/90757708

(master|REBASE 13/13)变回master

[email protected] MINGW64 /d/work/git/gitrepository/test (master|REBASE 13/13)
$ git rebase --abort
​
[email protected] MINGW64 /d/work/git/gitrepository/test (master)
​