Git原理、安装与各场景命令

1、原理

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

GIT 和SVN 对比,SVN 有中央仓库,集中式版本控制(cvs、svn)每次提交都是增量考虑,

Git 是分布式控制系统,没有中央仓库使用本地仓库代替中央仓库。Git 全量考虑,每一个版本都包含全量的数据,保证数据的完整性。Git  GUI 主要是gui 、gitk、github desktop 三个。

Git本地仓库和远程仓库同步原理和命令如下:

git忽略文件:
   空目录是默认忽虑
   .gitignore 文件
    通配符 
    1、* 代表所有字符   例如:*.txt
    2、! 代表排除,及不忽虑 ,例如:!a.txt  a文件不忽虑,继续提交。
    3、dir/   忽虑dir目录中的所有文件 
        例如: dir/*.txt 表示忽略dir目录下的所有txt文件 
                   dir/*/*.txt 表示及下级所有目录的所有txt文件

2、Git下载地址

环境说明:

xuhan@xuhan-pc:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.1 LTS
Release:	20.04
Codename:	focal
 
内核版本
xuhan@xuhan-pc:~$ uname -r
5.4.0-52-generic

Debian/Ubuntu
For the latest stable version for your release of Debian/Ubuntu

# apt-get install git
For Ubuntu, this PPA provides the latest stable upstream Git version

# add-apt-repository ppa:git-core/ppa # apt update; apt install git

3、配置

  • 设置用户名和邮箱
git config --global user.name "*******"
git config --global user.email "**********@qqcom"

global 配置文件存储位置:
C:\Users\Administrator\.gitconfig

#查看系统config
git config --system --list
  
#查看当前用户(global)配置
git config --global  --list
 
#查看当前仓库配置信息
git config --local  --list
  • 配置完成后,需要创建验证用的公钥,因为git是通过ssh的方式访问资源库的,所以需要在本地创建验证用的文件。

      使用命令ssh-keygen -C 'you email address@gmail.com' -t rsa(注意ssh-keygen之间没有空格)。

      会在用户目录~/.ssh/下建立相应的密钥文件。

root@xuhan-pc:~/git-study# ssh-keygen -C '769879295@qqcom' -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:vNSDzhsGvUau98FZbeaEeS6rPmmHfEZORbSUiEmxn4Q 769879295@qqcom
The key's randomart image is:
+---[RSA 2048]----+
|         .o+ oo. |
|          oo..o. |
|          E ...  |
|       o o o =.  |
|      . S o *.*  |
|       B + +oB   |
|        X.+*. o  |
|       +.o*.=o   |
|      ...++*.    |
+----[SHA256]-----+
  • 创建完公钥后,需要上传到资源库。

       使用命令cd ~/.ssh进入~/.ssh文件夹,输入gedit id_rsa.pub打开id_rsa.pub文件,复制其中所有内容。

       接着访问http://git.oschina.net/profile网页,点击SSH公钥,标题栏可以随意输入,公钥栏把你刚才复制的内容粘贴进去就OK了。

       

  • 可以使用ssh -T git@git.oschina.net命令来测试连接是否畅通。
root@xuhan-pc:~/.ssh# ssh -T git@git.oschina.net
The authenticity of host 'git.oschina.net (212.64.62.183)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added 'git.oschina.net,212.64.62.183' (ECDSA) to the list of known hosts.
Hi 徐*! You've successfully authenticated, but GITEE.COM does not provide shell access.

4、常用场景和相关命令

  • 第一次发布项目(本地仓库--->远程仓库)

首先:本地目录到本地仓库

先自己创建一个文件夹,把敲的代码拷贝进去(或者每次使用vim的时候直接切到该文件夹目录下进行编辑)。

先使用【git init】指令初始化一个git仓库,接着输入【git add .】添加文件,输入【git commit -m "注释"】提交至本地仓库。

然后:本地仓库上传到远程仓库

输入【git push -u origin master】提交至远程仓库,例如:采用码云作为远程仓库。

  • 第一次下载项目(远程项目--->本地项目)

输入【git clone git@gitee.com:xu_huan/ubuntu-git-test.git】命令,从远程仓库拉取文件到本地

  • 更新(远程仓库--->本地仓库)

输入【git pull】命令,从远程仓库更新文件到本地

  • 提交(本地仓库--->项目仓库)

输入【git push origin master】命令,从本地仓库推送到远程仓库

设置远程git仓库

git remote add origin git@gitee.com:x*an/******21.git

5、常用命令

  • 查看日志命令如下:
git log     查看提交日志
git log -2  查看最近两次提交日志
git log --graph  图形查看日志信息
git log --graph --pretty=oneline --abbrev-commit 简约查看日志
git reflog 查看所有的操作

blame 责任:
		git blame filename 查看文件名称提交的文件每行的作者
  •  查看git 状态命令如下:
git status  查看git当前目录的状态;
  •  从暂存区到工作区文件还原命令如下:
git reset HEAD <file> 恢复文件,从暂存区到工作区,用于删除或者修改还原;
  • git 删除命令如下:
1、git  rm <file> 先删除文件,删除后放入暂存区;
	后悔删除操作:git reset HEAD <file>  或 git checkout -- <file>
2、操作系统 rm <file> 先删除文件,删除后放入工作区;
  • git修改文件名命令如下:
git mv <file> <newfile> 修改文件名称
  •  git注释重写命令如下:
git commit --amend - m "修正的注释内容" 修改最近一次注释修改
  • git从工作区直接到本地分支命令如下:
git commit -am "" 合并增加和提交的操作 即:git commit -am ""   = git add .    +  git commit -m "" (注意:第一次提交不能使用合并命令)
  • git分支操作命令如下:
git branch 查看当前分支
git branch -a 查看所有分支
git branch -av 查看所有分支,以及时间点
git branch <branchname> 创建分支
Git branch -v 查看所有分支最近一次提交的。
git checkout -b <branchname> 创建分支并切换分支
    如果在分支a,中进行了写操作,但是没有git add .之前,即只局限于工作区,master分支是可以看见的未add之前的文件,一旦git add . 之后,maste分支则看不见文件。
    如果在分支a,中进行了写操作,没有git add .之前,删除分支是可以的,但是如果git add .或者git commit之后,就不能删除了,除非采用git branch -D <branchname> 强制删除分支。
git checkout <branchname> 切换分支
git branch -d <branchname> 删除分支(不能删除当前分支) 分支包含未合并的不能删除,所以删除分支之前建议先和合并
git branch -D <branchname> 强制删除分支
git branch -m master master2 把分支分支名称master改成master2
git branch mycommit sha1 回退之前某个版本并创建分支
  •  git分支合并命令如下:
git merge <branchname>  当前分支和 branchname分支合并

如果存在两个分支,一个分支靠前(dev),另外一个分支靠后(master),如果不冲突,master分支可以通过merge 直接赶上dev,称为fast forward.
fast forward 本质就是分支指针的移动,中间的commit版本,任然会保存。
fast forward 特点:
	1、两个分支fast forward之后两个分支归于一个commit点,可以通过 git log 查看sha1值。
	2、merge之后没有分支信息(丢失分支信息,可以通过git log --graph)
git 在merge时,默认使用fast forward ,也可以禁止使用。git merge --no --ff,其特点:两个分支merge 之后不会归于一个commit点,可以通过git log查看sha1值。
  • git冲突解决如下
合并冲突
1、如果冲突,需要通过手动调整来解决冲突,解决冲突之后:git add XXXX ,git commit -m "";
   在此过程中 解决冲突的同时会把另外的一个分支同步过来,一起提交。
2、如果一方是落后方,前进到另一方,则落后方可以直接通过merge 合并到前进一方.
  • 版本回退
版本回退
回退到上两次commit:  git reset -hard HEAD~~
回退到上n次commit :  git reset -hard HEAD~n
回退到前任意次commit:  git reset -hard sha1值
回退之后再回退
通过git reflog 查看所有的操作,在用git reset -hard sha1值 找回之前的操作
  •  checkout放弃与游离操作
1、git checkout filename ,工作区的内容,未提交之前可以放弃,也就是相对于暂存区和对象区。
2、git reset filename 将之前增加到暂存区的内容回退到工作区中  
3、git checkout sha1值版本穿梭
	git checkout 6c3f163
	git checkout 997cd1647
	提交记录: 84ee5d0---->6c3f16316b----->63e89535d------>997cd1647
    git checkout 6c3f16316b 回到6c3f16316b版本
	编辑文件再提交,git commit -am "修改提交" 此时会提交生成一个版本(d5d9228bfc),但是对后续的版本没有影响。
	此时创建一个分支,可以继续走代码修改。
	git checkout d5d9228bfc 回退这个版本,再创建分支,可以实现回到以前版本,继续再原来的版本修改代码走分支。
  • stash :保存现场(不是穿梭之前版本)
stash :临时保存(保存现场)
	1、建议(规范),在功能未开发完成之前,不要commit
	2、规定(必须):
        2.1、如果两个分支不在同一个版本上,在没有commit之前,不能切换分支。
        commit之后才能切换到另外一个分支;临时保存一份(保存现场 git stash)。
        适用于当前分支未开发完毕,需要切换分支其他分支修改内容,可以临时保存( git stash)一下。
        2.2、如果两个分支在同一个版本上是可以修改之后不提交,直接切换分支。
  • stash pop 还原现场
当前其他分支处理完成,需要切换到之前暂存的分支上继续处理。需要找回临时保存的内容。
	通过 git stash list 查看临时文件离列表,再通过git stash pop(还原,但是会删除现场列表) 找回临时保存的内容
	git stash drop 现场id  删除list中一个现场
	git stash apply 现场id  指定恢复到某一个现场
  • Tag标签:适用于整个项目,和分支没关系
1、创建标签:git tag v.1.0
2、创建标签:git tag -a XXX  -m "XXXX"
3、查看标签: git tag 
4、删除标签:git tag -d XXX
5、查看标签:git tag -l "XXX"  git tag -l "V*"
  • git diff比较内容
操作系统的diff(比较文件内容)
	diff filenamA  filenameB
	diff -u  filenamA  filenameB
git diff  git的比较(比较不同区的文件内容)
	git diff 默认比较的暂存区和工作区的比较
	git diff sha1 比较对象区和工作区比较
	git diff  --cached sha1 比较和对象区和暂存区比较
  • 远程仓库
1、本地------push---->远程(github)
	与远程仓库建立通讯SSL认证
	ssh-keygen -C '769879295@qqcom' -t rsa -b 2048
	
	下载远程仓库方式:
		ssl可以免密码登录,如果https需要输入登录密码
	
	git remote add origin git@gitee.com:xu_huan/git-demo-001.git
	让本地git知道  origin就是git@gitee.com:xu_huan/git-demo-001.git 的别名 可以使用  git remote show origin 查看远程对应的路径 同时会比较本地的情况
	git push -u origin master  将本地的master分支提交到远程,后续修改推送只需要git push即可
	
	本地git连上远程仓库之后会在本地增加一个origin/master分支,通过该分支感知远程仓库的内容

	一般分支命名和流转:
	   dev分支,用于开发
	   test分支,用于测试
	   master分支,用于发布生产
	   dev--->test(merge dev)---->master(merge test)

2、远程(github)------pull(拉取+合并)---->本地 ,其中pull = fetch + merge
从远程仓库第一次下载仓库内容  	git clone git@gitee.com:xu_huan/git-demo-001.git resporityname
	git status 查看本地的状态
	git remote show origin 查看远程仓库的情况
本地多人和仓库发生冲突:
	模拟两个用户连接到仓库,同时修改同一行文件模拟提交,第一个用户提交之后,第二个用户
	需要先拉取合并,解决冲突再提交。pull = fetch + merge 
	****fetch 是不是到origin/master 看下文件内容
	快捷方式,vi模式下    esc退出编辑模式变成只读模式,连续两次D键  会自动删除当前行
	总结脚本:pull--->vi--->add---->commit---->push
  • git 和远程仓库分支操作
本地---->远程
	第一次推送 git push -u origin dev 把本地和远程dev分支关联
远程----->本地
	1、pull 将远程的仓库拉到本地,此部仅仅只是从远程分支拉到本地远程分支(追踪分支),还需要从本地远程分支到本地分支。使用git branch -av 查看本地仓库情况
	2、本地远程分支(追踪分支) ----》本地分支
			方法一、git checkout -b dev origin/dev 创建分支并且和本地远程分支关联
			方法二、git checkout -b dev --track origin/dev
删除本地/远程分支
	git branch -d dev 是删除本地分支
	git branch -D dev 是强制删除本地分支
	git push origin dev:dev 把本地的推送到远程仓库
	git push origin :dev 把本地空推送到远程仓库,达到删除远程的目的
	git push origin --delete branchname

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值