git安装与理论

一、安装的一些选项的意思

(1)Addition icons: 是否创建桌面快捷方式。

(2)Windows Explorer integration: 是否使用bash 或者 GUI工具。

(3)Associate .git*... 是否配置默认的文本编辑器。

(4)Associate .sh ...: 是否关联Bash命令行执行的脚本文件。

(5)Use a TrueType编码 : 在命令行中是否使用TruthType编码, 该编码是微软和苹果公司制定的通用编码。

(6)检查更新

选择默认的编辑器

(1)Use Git from Git Bash only:这是最谨慎的选择,因为PATH环境变量不会被修改。您只能从Git Bash中使用Git命令行工                具,不能再cmd命令行中使用Git命令

(2)Git from the command line and also from 3rd-paty software:可以在Git Bash 、cmd命令行 和 Windows PowerShell 中使           用Git命令,但是会向PATH环境变量中添加一些最小的Git包装器

(3)Use Git and optional Unix toos from the Command Prompt:会在第二个选项的基础上添加一些Unix系统中的工具,会覆             盖 Windows工具中的一些命令,例如: “find” 和 “sort”

(1)checkout Windows-style, commit Unix-style line endings:Git在检出文本文件时将LF转换为CRLF。当提交文本文件时,             CRLF将被转换为LF。检查是windows格式,最后commit是unix格式

(2)Checkout as-is, commit Unix-style line endings:当检出文本文件时,Git将不执行任何转换。当提交文本文件时,CRLF将            被转换为LF。检查文本文件时不做转换,commit转为unix格式

(3)Checkout as-is, commit as-is:Git在检出或提交文本文件时不会执行任何转换操作。

二、git的大致思想

1.主要理解

head:当前commit的引用

branch:commit串

master:也是branch,但这相当于树的主干

内部如何存储:

git是用“引用(哈希值)”,一个版本(一次commit)一个commit快照,(两个版本如何联系起来的:可以理解为有个属性为前一个版本的“引用”,也就是哈希值)

本地库中有:

/config,/head,   /info  , /logs ,  /objects(存放git对象),  /refs(分支存放:本地分支heads,远程remotes,) 等等

.git/下的head文件表明当前分支

git对象(会存放在objects中)

一些命令

find .get/objects -type f 查询object是下面所有的文件

git hash-object -w xxx 放到git数据库并且返回hash值

git cat-file -p xxxx  看xxx这个哈希值代表什么

Blob 对象(hash--内容)(因为内容不变,所以哈希不变,即版本未修改哈希不变)

存储的是文件内容,压缩的

文件名字是根据内容算出的一个hash值

tree对象(hash--目录)

blob对象

子tree对象

commit对象

作者提交者注释

指向一个 tree对象 的指针

文件4中状态(参考https://blog.csdn.net/qq_39135287/article/details/103352107

Untracked:未跟踪,表示此文件在工作区中,但是并没有添加到暂存区中,通过git add fileName 命令,把文件添加到暂存区,这里的fileName是指要往暂存区添加的文件名,使文件状态由Untracked(未暂存) → Staged(已暂存)

Unmodified:未修改,即:本地仓库与工作区的内容一致,如果文件被修改,则文件状态由Unmodified(未修改) → Modified(已修改)

Modified:已修改, 仅仅只是修改, 并没有进行其他的操作,这时文件的状态可以有两种变化,一是通过使用命令git add fileName,文件状态由Modified(已修改) → Staged(已暂存),二是通过使用命令git checkout -- fiilename丢弃修改内容,即:从本地仓库取出最新内容,覆盖当前修改,文件状态由Modified(已修改) → Unmodified(未修改)

Staged:已暂存,这时文件的状态可以有两种变化,一是执行git commit命令则可以将修改的文件同步到本地仓库中,这时本地仓库与工作区的内容一致,文件状态由Staged(已暂存) → Unmodified(未修改),二是执行git reset HEAD filename命令取消暂存,文件状态由Staged(已暂存) → Untracked(未暂存)

 

2.常用命令

(1)版本库创建

从远程库克隆

git clone <url>

初始化本地版本库

git init

(2)修改与提交

状态查询:status

git status

查看变更内容

未提交的内容:diff

#查看不同的地方 默认查看工作区和暂存区

git diff --cached 比较cache和Repository

git diff HEAD 工作区和最新的Resository

git diff commit-id 工作区和制定的repository

git diff --cached commit-id

git diff --commit-id commit-id

#把工作空间的某个文件添加到cache

add

git add xxxx

#把工作空间的所有内容添加到cache

git add -A

改名

git rm

删文件

git mv

commit

把cache(暂存区)当中的某个文件提交到本地库

git commit -m "xxxx"

把cache(暂存区)当中all文件提交到本地库

git commit -am "xxxx"

修改最后一次提交

git commit --amend

(3)查看提交历史

git log 

看历史中多个commit:log

详细改动  git log -p

大致改动 git log --stat

某个具体的commit:show

(4)撤销

git reset

git reset  --mixed 是默认操作,清空暂存区,保留工作区,本地库重置位置, 即回到commit前

--soft 保留暂存区,工作区,并把head的位置所导致的新的文件差异放进暂存区,即回到add前

--hard 暂存区,工作区清空,完全还原到上个版本

git reset --hard HEAD^^ 小角个数代表重置次数。执行reset操作之后,HEAD和远程仓库不一致,需要解决冲突才能push

注:reset和checkout都可以切换head位置,但reset在移动时会带着它所指向的branch一起移动,而checkout不会

checkout(一般不用)(覆盖?)

git checkout head <file>撤销指定的未提交的文件修改内容

checkout:(1)切换分支或创建,同时head(可以理解为指针)就会指向checkout出的分支

                  (2)放弃掉所有还没有加入到缓存区的修改,即还未使用 git add 。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。需要自己手动删除

// 放弃单个文件修改,注意不要忘记中间的"--",不写就成了检出分支了!
git checkout -- filepathname
// 放弃所有的文件修改
git checkout .  

git revert <commit>撤销指定的提交(会增加一条log记录)

当我们已经有v1 v2 v3 v4时,如图,当v3需要撤销时,他会增加一个v5但内容与v2一样

(5)分支与标签

#查看当前分支 -a查看所有分支 -av 查看所有分支的信息 -avv 查看所有分支的信息和关系

git branch

#创建一个分支 基于当前分支创建分支

git branch xxx

#基于oldType创建分支

git branch newBranch oldType

删除分支

git branch -d xxx (1.删除引用,但git会在一定时间回收 2.head指向的branch不能删 3.未merge到master的branch会失败(未验证))

tag

git tag 列出所有本地标签

(6)合并与衍合

git merge <branch> 合并指定分支到当前分支

git rebase <branch> 衍合指定分支到当前分支

如:

git checkout branch1

git rebase master

(7)远程操作

git remote -v

git remote show

git remote add <remote><url> 添加远程版本库

git push 推送到远程仓库并快速合并

git fetch是将远程主机的最新内容拉到本地,不进行合并

git pull 是将远程主机的master分支最新内容拉下来后与当前本地分支直接合并 pull = fetch + merge 

(8)其他

stash将本地的变化缓存起来。stash pop将代码从缓存中弹出来。可以有效利用该命令,合并远程代码。

git stash:临时存放工作目录的改动

#查看文件内容

git cat-file -p commitid

#查看对象类型 blob commit tree

git cat-file -t commitid

git log --pretty=oneline   可以显示完整的commit id

git reflog 查看历史命令

#把内容输入到一个文件

echo "xxxx" > xxxx

为电脑配置身份信息

git config --global user.name "Your Name"

git config --global user.email "email@example.com"

git log 与 git reflog的区别:

git log:显示所以提交过的版本信息,但不包括已经被删除的 commit 记录和 reset 操作记录

git reflog:显示所有的操作记录,包括已经被删除的 commit 记录和 reset 操作记录,常用于恢复本地的错误操作,即版本回退操作。

三、与svn区别

git中本地库可以相互通讯,svn不行

git中操作引用,svn操作文件

git中版本之间是快照,svn版本间是增量

如:a2相当于copy了fileA+增量△1

附录

https://mp.csdn.net/console/editor/html?not_checkout=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值