注意:第一次使用Git需要配置用户信息

git config --global user.name 用户名   #配置git的用户名
 git config --global user.email 邮箱       #配置用户的邮箱
 
 
 git config --list #检查信息是否写入成功

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

Git中需要理解的概念

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

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

工作区

工作区(Working Directory):是我们自己创建的项目目录,存放代码的位置,可以是新建的,也可以是已经建好的项目。

版本库

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

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

  • 暂存区(stage):项目目录中文件内容修改后暂时存放的位置,用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息。
  • 本地仓库(git repository):修改的内容提交后保存的位置,就是安全存放数据的位置,这里边有你提交的所有版本的数据。其中,HEAD 指向最新放入仓库的版本(应该是 Git 仓库中 HEAD 指向的版本)。

后面还会用到远程仓库:码云、github。

python 鸿蒙app_git

Git 的一般工作流程

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

因此,Git 管理的文件有三种状态:已修改(modified)、已暂存(staged)和已提交(committed),依次对应上边的每一个流程。

首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。

因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

使用Windows的童鞋要特别注意:

千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。

Git常用命令

1、进入项目目录:

cd 项目目录的路径      #进入项目目录

2、初始化本地git仓库:

git init        #初始化一个git仓库(repository),初始化完成之后会在项目目录中自动创建一个.git隐藏文件夹,此文件夹是git的版本记录,用来跟踪或者管理git仓库

3、查看版本库的状态:

git status          #查看当前git仓库的状态
 git status -s       #简单方式查看git仓库的状态
 
 三种状态
 1.untraked file (工作区的文件未被跟踪的文件: 新建的文件没被暂存)
 2.changes to be commited(暂存区的文件,将要被提交的修改: 文件已经被存入暂存区,还没有提交到本地仓库)
 3.changes not staged for commit(没有准备提交的修改或文件之前提交过,然后进行了修改但还未add)

4、查看修改的内容:

git diff                 #可以查看修改内容

5、把工作区的文件添加到暂存区:(以下带序号的为本地添加到远程库的步骤,共五步)

1. git add 文件名     #把没有添加到暂存区的文件添加到暂存区(文件名可写多个)
2. git add .           #把工作区没有添加到暂存区文件全部添加到暂存区(一次添加多个)

6、把暂存区的文件提交到本地仓库

3. git commit -m 备注信息      #把加入暂存区的文件提交到本地仓库(实际上就是把暂存区的所有内容提交到当前分支)

如果是main分支,一定要过一遍git add . 和commit -m"" 之后再创建和切换分支再重复操作
这一步之后先看当前分支是否是你想要的分支,如果是刚创建的是没有分支的,默认main分支,如果显示main分支切记要去创建个master分支再切换到master分支
最后再执行一遍git add . 再git commit -m"" 最后按照流程往下走即可

拉取远程仓库代码----提交到远程仓库

4.先使用:git pull --rebase origin master          #把远程库的内容同步到本地仓库(如果连接完成库之后,远程库没有增加新的内容,这一步可以忽略)

5.再使用:git push -u origin master                #把本地仓库的内容推送到远程库(实际上是把当前分支master推送到远程库origin)

7、查看版本库的历史操作记录

git log             #查看git操作的详细历史记录
 比如:
 commit b979bc1782e8f56750554323474da72ebca03553 #本次操作的版本号(commit id 版本号是唯一的)
 Author: jinxizhen <842166299@qq.com>            #用户信息
 Date:   Thu Jan 19 11:40:55 2017 +0800          #提交的日期
 
    初始化了git仓库并创建index.txt                  #提交的备注信息
git log --oneline   	#把git操作日志简化为一行显示

git log --pretty=oneline  #简化信息,方便查看

git reflog          	#查看操作命令及日志

版本回退

第一种:修改的内容还没有添加到暂存区

git checkout -- 文件名     #撤销工作区最后一次修改的内容,前提是修改的内容还没有添加到暂存区

第二种:修改的内容已经添加到暂存区,但是还没有提交到本地仓库

先使用 git reset HEAD 文件名      #撤销添加到暂存区的内容
再使用 git checkout -- 文件名 	  #回退到上一个状态

第三种:修改的内容已经提交到了本地仓库

git reset --hard HEAD^ //回退到当前工作区版本的上一个版本
  HEAD^:上一个版本
  HEAD^^:上上一个版本
  HEAD~100:上100个版本

如果已经记不清是上几个版本了,直接使用版本id
git reset --hard 版本id    #回退到指定的版本号的状态       
	版本id就是commit提交时产生的id

分支操作:(以下带序号的为创建分支到同步远程库项目的步骤,共七步)

每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支,所以分支就是一条commit时间线。

一个项目可以对应多条分支,也可以对应一条分支

HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

创建分支并切换两步完成:

1.git branch 分支名      #创建一个分支
2.git checkout 分支名    #切换到指定的分支

添加项目

3.git add .
4.git commit  -m"备注信息"

第五步参考下面的 : 本地分支与远程分支同步
执行完第五步后再执行这个第六步

6. git pull 
7. git push 

如果git push报如下错误
$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

就执行下面命令即可解决
git push --set-upstream origin master

至此结束

创建分支并切换一步完成:

git checkout -b 分支名 #创建一个分支,并切换到分支(相当于创建+切换)

查看所有分支:

git branch            #查看所有分支,当前的分之前会有一个*符号

合并分支(三个代码就完成):

1.git merge 分支名   #合并指定分支的内容到当前分支(例如将分支内容合并到master上,需要先切换到mester分支再执行此命令),fast forward模式

//合并完了需要重新pull 和 push 一下
2.git pull
3.git push

git merge --no-ff 分支名 #可以看出曾经合并过

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。–no-ff参数,表示禁用Fast forward

删除分支:

git branch -d 分支名  #删除分支
git branch -D 分支名  #强行删除

查看分支合并图:

git log --graph		 #查看分支合并信息
git log --graph --pretty=oneline --abbrev-commit  #简化信息

本地分支与远程分支同步:

5.git push -u origin 分支名  #本地创建分支推送到远程库

标签管理

一个版本库保存一个分支master,各自的版本库保存着各自的分支,各自的主分支名称都为master。 发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

标签是指向某个commit的指针

打标签:git tag <name> #默认标签是打在最新提交的commit上

git tag <name> commit-id(可选)
git tag -a <name> -m '说明' commit-id(可选)

查看标签git tag 查看标签信息git show <tagname> 删除标签git tag -d <tagname> (本地)

推送标签到远程:

git push origin <tagname>  #推送单个
git push origin --tags  #推送多个

远程仓库

Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。

实际使用中可以找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。这个服务器就是远程仓库,不过,不需要我们自己搭建运行Git的服务器。好在这个世界上有个叫GitHub的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

国际上使用GitHub的比较多,在国内也有很多人使用码云,可以把码云看成国产的GitHub。GitHub使用人数比较多,找开源的代码比较方便,但是由于是纯英文版,对一些小伙伴不是很友好,并且网站打开速度比较慢,所以我们可以使用码云来代替GitHub,由于两者使用方式出奇的一致,掌握了码云的使用也就掌握了GitHub的使用。

码云

官网:https://gitee.com/

添加公钥 sshkey

由于你的本地Git仓库和码云仓库之间的传输是通过SSH加密的,在使用 SSH 协议访问仓库仓库之前,需要先配置好账户/仓库的SSH公钥。

最新步骤:https://gitee.com/help/articles/4181#article-header0

第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

ssh-keygen -t rsa -C "842166299@qq.com"   #生成公钥(邮箱:注册码云的邮箱)

生成公钥的步骤:

  • 生成公钥时,会提示我们选择保存的路径, 比如:Enter file in which to save the key (/Users/1/.ssh/id_rsa): 路径使用默认的,直接回车。
  • 如果提示已经存在,可以直接覆盖掉,输入:y 然后回车 比如:/Users/1/.ssh/id_rsa already exists. Overwrite (y/n)?
  • 最后会提示输入密码,由于这个Key也不是用于军事目的,所以也无需设置密码,直接回车,就可以生成公钥

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第二步:查看公钥

cat ~/.ssh/id_rsa.pub     #查看公钥

比如输出:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC53lok+oPntpwg0E0p6z2Klxb7275YyWcWyxiQZk7sKL0J90xi1btvqd7MVEHH2UvuPluSKwyLVTQCmA1iWlqyRjuO4LBeY85feqkhKWi+haq5u9NEAcALS00vNH6URWS7Uz5gU1RIs3F9Ssd9V/VsWNJ28DVIGKYM2s8Vs0K1CQ3l0Ed0onlOsOb2vUa/5k8R64P8vS+EpV/1XsxH99cQK2tq8A6tyRBAGe406s/sNufV/EYvGcM9nQyz+QI/lxcoHCw0xc9kkezxk4X8uTxgwMBx5EkTmMzYxcr34jT+ltsMHULmaJPWoN4J55EdINY+9YzfpwqYABoQATjK0p8z 842166299@qq.com

第三步:验证是否成功

ssh -T git@gitee.com    #验证公钥是否添加成功,比如:如果返回Welcome to Git@OSC, jinxizhen! 说明返回成功

为什么码云需要SSH Key呢?因为码云需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,码云只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,码云允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到码云,就可以在每台电脑上往码云推送了。

最后友情提示,在码云上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。

如果你不想让别人看到Git库,有两个办法,一个是交点保护费,让码云把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的。

Git连接远程库

python 鸿蒙app_鸿蒙_02

添加远程库

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

第一步:连接远程库

git remote add origin git@gitee.com:Jinxizhen/weather.git   #连接远程库,把本地创建好的仓库同步到远程库

请千万注意,把上面的git@gitee.com:Jinxizhen/weather.git替换成你自己的远程库地址。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

第二步:有两步操作

第一次同步远程仓库和本地仓库使用下面两条指令

先使用:git pull --rebase origin master          #把远程库的内容同步到本地仓库(如果连接完成库之后,远程库没有增加新的内容,这一步可以忽略)

再使用:git push -u origin master                #把本地仓库的内容推送到远程库(实际上是把当前分支master推送到远程库origin)

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

第二次开始同步远程库 或者 推送本地仓库内容到远程库就不用那么麻烦了,使用下面的指令即可:

git pull  	#把远程库的内容同步到本地仓库
git push	#把本地仓库的内容推送到远程库
SSH警告

当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

这是因为Git使用SSH连接,而SSH连接在第一次验证码云服务器的Key时,需要你确认码云的Key的指纹信息是否真的来自码云的服务器,输入yes回车即可。

Git会输出一个警告,告诉你已经把码云的Key添加到本机的一个信任列表里了:

这个警告只会出现一次,后面的操作就不会有任何警告了。

删除远程库

如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm <name>命令。使用前,建议先用git remote -v查看远程库信息:

git remote     #它会列出每个远程库的简短名字
git remote -v  #-v 选项,显示对应的克隆地址

然后,根据名字删除,比如删除origin

![img]()
![img]()

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取]()**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

就不会有任何警告了。


##### 删除远程库


如果添加的时候地址写错了,或者就是想删除远程库,可以用`git remote rm <name>`命令。使用前,建议先用`git remote -v`查看远程库信息:

git remote #它会列出每个远程库的简短名字
git remote -v #-v 选项,显示对应的克隆地址

然后,根据名字删除,比如删除`origin`: