Git 最简单的Git入门

ㅤㅤㅤ
ㅤㅤㅤ
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(真正的质量意味着让程序员为他们写的代码自豪,参与到编写代码之中并把它当做自己个人的事情。——Linus Torvalds
ㅤㅤㅤ
ㅤㅤㅤ在这里插入图片描述

Git

Git 诞生于 Linux 内核社区对可用的 VCSs(版本控制系统)的挫败感。Linux 内核的发展在当时是相当不寻常的:项目中有大量的贡献者而且贡献者的参与程度和对代码知识库的了解有很大的差异。由于 Linux 内核不寻常的发展状况,开发人员很难找到适合他们需求的 VCSs(版本控制系统)。于是他们选择了 BitKeeper 和并发修订系统(CVS),每个系统有一组核心开发人员去负责管理内核的开发。BitKeeper 提供分布式版本控制,而 CVS 是一个客户端-服务端版本控制系统,它可以让开发人员“签出”项目的副本,进行更改,然后将他们的改变“签入”到服务端

Git安装-Ubuntu

sudo apt-get install git
然后输入git help 出现帮助语句后就证明git安装成功

Git初始化账户配置

  • git config --global user.name “your use name”

配置用户名

  • git config --global user.email “your email”

配置邮箱

  • git config --list

查看git相关配置

user.email=17319132391@163.com
user.name=zhangzw
https.proxy=https://127.0.0.1:1080
http.proxy=http://127.0.0.1:1080
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=git@github.com:820465323/demo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.dev.remote=origin
branch.dev.merge=refs/heads/dev

或者通过查看.git目录下的config文件,其中也有git相关的配置

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = git@github.com:820465323/demo.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
[branch "dev"]
	remote = origin
	merge = refs/heads/dev

Git配置ssh密钥和公钥

  • ssh-keygen -t rsa -C “your email”

生成ssh密钥

  • cat ~/.ssh/id_rsa.pub

查看私钥

  • 复制id_rsa.pub文件内的密钥并配置在github/gitlab/gitee等

配置ssh,这样就可以对应的代码仓库进行ssh通信
github为例在这里插入图片描述

  1. ssh -T git@github.com

验证ssh连接

Git仓库初始化以及各项配置

在这里插入图片描述

  • git init

在当前目录下初始化一个新的git仓储,并生成一个隐藏的.git文件
在这里插入图片描述

文件/文件夹名称文件/文件夹描述
branches用于支持从svn(subversion)中复制到git的存储库 stackoverflow解释
hooks存放可在某些指令前后触发运行的钩子脚本(hook scripts),默认包含一些脚本样例 Git钩子
info存放项目信息,默认包含一个全局exclude文件, 用来放置不希望记录在.gitignore 中的忽略模式
logs用于记录分支提交记录等信息的文件夹
logs/HEAD存放了当前分支的所有引用记录,就像.git/HEAD一样存放着当前分支的指向,但在logs下该文件存放着该分支所有的提交记录在这里插入图片描述
logs/refs存放了heads,remotes,stash
logs/refs/heads记录了当前git仓库下分支所做的所有更改在这里插入图片描述
logs/refs/remotes记录了当前git仓库各分支commit的更新记录在这里插入图片描述
logs/refs/stash记录了当前git仓库下的储藏记录在这里插入图片描述
objectsgit的核心,存储所有Git的数据对象,用来维护与管理项目的修订版本和历史信息 Git背后的Objects / Git对象 官方解释在这里插入图片描述
refs存储各个分支的最新指向和存储记录等 Git refs官方解释在这里插入图片描述
refs/heads/branches name记录着当前git仓储的最新分支引用在这里插入图片描述
refs/remotes/repo name/记录了当前所在分支以及分支的最新提交记录 在这里插入图片描述
COMMIT_EDITMSG当前分支最新commit提交备注 在这里插入图片描述
configgit相关配置在这里插入图片描述
description一个文本文件,在Web前端中显示为项目描述 Git官方解释
FETCH_HEADFETCH_HEAD指的是: 某个branch在服务器上的最新状态,当前分支指向的FETCH_HEAD, 就是这个文件第一行对应的那个分支 FETCH_HEAD相关资料
HEAD描述了当前的指向分支 Git寻根 ^和~的区别
  • 或使用命令查看.git内文件夹的相关描述
git help gitrepository-layout

官方描述连接 https://git-scm.com/docs/gitrepository-layout

在这里插入图片描述

Git常用命令

git add 将文件添加至暂存区

将我们需要提交的代码从工作区添加到暂存区

  • git add .

将所有文件添加至暂存区,但不包含已删除文件

  • git add -A .

将所有文件添加至暂存区,包含删除文件

  • git add -u .

将所有文件添加至暂存区,但不包含新增文件

  • git add file

将指定文件添加至暂存区

  • git restore file

撤销指定文件的更改

  • git reset HEAD file

撤销暂存区的指定文件

  • git reset HEAD .

撤销所有暂存区文件

  • git add -h

查看git add 命令相关的帮助

git commit 将暂存区的更改提交至版本库

将暂存区的更改提交至版本库

  • git commit -m “message”

将暂存区中所有文件提交至版本库 -m后的参数是本地提交的备注,如果不带-m 则会生成一个vim编辑器来填写备注

  • git reset HEAD^ / git resetHEAD^

撤销最近的一次父提交至工作区

  • git reset --hard HEAD^n / HEAD~n

将当前指针重置为指定的commit,会造成当前commit的丢失

  • git commit -h

git commit 命令帮助

git pull 拉去远程仓储最新的commit至本地并合并

拉取远程仓库代码至本地 git pull = git fetch + git merge

  • git pull origin master

拉取master分支并和当前分支合并

  • git pull origing master:dev

拉取master分支并与本地的dev分支合并

  • git pull -h

git pull 命令帮助

git push 将当前commit提交至远程仓储

将版本裤修改推送至远程分支

  • git push -u origin master

指定默认主机进行关联,这样在推送的时候就不需要在git push后面带任何参数

  • git push

将本地分支推送至远程master分支

  • git push --force origin git push

如果当前版本低于远程版本,可以使用此命令强制提交,慎用

git diff 文件/版本比较
  • git diff

比较当前工作区与暂存区的区别

  • git diff --cached / git diff --staged

显示暂存区与最近一次commit之间的比较

  • git diff HEAD branchName

显示工作区和指定分支最近一次commit之间的比较

  • git diff branch1 branch2 --stat

比较两个分支之间的不同文件差异

  • git diff branch1 branch2

比较两个分支之间不同文件的详细差异

  • git diff branch1 branch2 file

比较两个分支指定文件之间的差异

git reset 版本回退

使用reset可以将当前commit指向更改为指定的commit进行回退,然后使用–force进行强制提交慎用,因为会丢失提交记录

  • git reset --hard commidID

使当前指向指针指向指定的commit,然后使用git push --force强制提交

  • 如何找回强制提交后的代码?
    git reflog 可以找到本地所有分支的所有操作记录,包含已删除的commit和reset记录
    在git reflog中找到所有更改后,再使用git reset --hard commitID更改执行即可
    但值的注意的是如果你在强制提交时,没有先拉取别人的代码,那么本地就没有这个commit记录,那么他人的代码依靠你自己本地记录是无法修复的,此时需要和他人沟通,根据他的reflog来进行修复
git revert 代码撤回

对于版本回退最推荐的方式,因为他不会直接更改指针导致commit丢失,而是反做一个版本达到撤销的目的
Git Revert 官方解释

  • git revert commitID -m “message”

撤回指定commit版本并生成新的commit

  • 通常情况下该命令可以安全撤销指定commit的提交
  • 如果遇到冲突,需要先解决冲突,再手动commit提交
  • 还有一种情况,如果撤销的是一个经过合并状态的分支,则需要额外带上-m参数,指定需要回退合并的commit
    在这里插入图片描述
    什么意思呢,就是说因为该commit是一个合并的commit,需要你指定具体要回退哪一个commit
    我们使用git show 查看这个commit
    在这里插入图片描述
    可以看到这是一个合并的commit,分别是394c430和2922122,我们再使用git log查看提交日志
    在这里插入图片描述
    然后选择要撤销的版本再push即可
    git revert 394c430
    git push
当然,我们也可以采用在git revert -m 后缀的方式进行回退
git revert aa9f4553e47243edc7d12241d135566f3ddcf967 -m 2
这个2是当前commit的第几个父级
通过git log或者git cat-file -p commitID查看
第一个出现的就是1,第二个出现的就是2
上面的截图我们看到第一个是394c430,第二个是2922122
我们要保留2922122,删除394c430,所以需要选择2
git push
就可以完成代码撤销了 
git merge 将指定commit合并至当前分支

用于将指定commit合并至当前分支
https://git-scm.com/docs/git-merge

  • git merge dev

将远程仓储的dev分支合并至本地

  • git merge --abort

在合并冲突时,使用此命令可以终止合并并回到合并前的状态,但如果在合并时有未提交的文件,使用此命令则无法完成回退
建议

  • 在merge前先将本地的更改进行储藏git stash
  • 或者在merge前先将本地更改提交
  • git merge --continue

解决合并冲突后,运行此命令解决合并冲突继续运行

git stash 将当前分支所做的更改进行储藏
  • git stash save “stash message”

将当前分支所做更改进行初中那个,默认git stash,但建议带上save “stash message” 方便查找

  • git stash list

查看储藏列表

  • git stash show stash@{num}

显示储藏所做更改,git stash show默认展示第一个储藏更改,可以查看指定储藏 stash@{通过查看储藏列表可以找到所要查看的编号}

  • git stash show stash@{num} -p

显示储藏所做的具体更改,指定编号后,带上-p参数,可以查看储藏的具体更改

  • git stash apply stash@{num}

应用某个储藏,但不会将该储藏从列表中删除,如果不指定储藏版本,则默认应用最近的一次储藏

  • git stash pop stash@{num}

应用某个储藏,但同时也会将该储藏版本删除,如果不指定储藏版本,则默认应用最近的一次储藏并删除

  • git stash drop stash@{num}

丢弃指定版本的储藏

  • git stash clcear

丢弃所有储藏

git log 查看当前分支的提交日志
  • git log

会按时间先后顺序列出所有的提交,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明

  • git log -p -num

会显示每次提交所引入的差异(按 补丁 的格式输出)。 你也可以限制显示的日志条目数量,例如使用 git log -p -2 选项来只显示最近的两次提交

  • git log --stat

展示每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结

  • git log --pretty=oneline

使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如 oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还有 short,full 和 fuller 选项,它们展示信息的格式基本一致,但是详尽程度不一

  • git log --pretty=format:"%h - %an, %ar : %s"

可以定制记录的显示格式。 这样的输出对后期提取分析格外有用——因为你知道输出的格式不会随着 Git 的更新而发生改变
git log --pretty=format 常用选项

git clone 将远程仓储克隆至本地

将远程仓库克隆至本地

  • git clone url

将指定远程仓储克隆至本地

git 新建分支
  1. git checkou -b dev

从当前分支复制出新的分支并命名为dev

  1. git push origin dev

将新建的分支dev推送至远端

  1. git pull

更新本地仓储

  1. git branch --set-upstream-to=origin/dev

关联远程分支建立追踪信息

git 删除分支
  • git push origin --delete dev

删除远程仓储dev分支

  • git branch -d dev

删除本地仓储dev分支

关联远程仓储并推送
git remote add origin git@github.com:timelineHook/nest-pro.git
git branch -M master
git push -u origin master

BitKeeper与Linux,git史前琐事

https://blog.csdn.net/glory1234work2115/article/details/51277402

简单明了的Git入门

https://rogerdudler.github.io/git-guide/index.zh.html

像Git那样思考

http://think-like-a-git.net/sections/git-makes-more-sense-when-you-understand-x/example-4-lsd-and-chainsaws.html

参考文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值