赞
踩
git的原理是存储元数据(key-value形式)
每次提交代码以后,git就会将当前内容存储到类似hashmap的数据结构中
存储命令:git hash-object -w “文件名”
查看hamp值:git cat-file -p “key”
git提交文件流程图:
git关联多个仓库
一个项目可以关联多个远程仓库,可以用来做备份功能*
git init '项目名字' ->example: git init 'study-git-bak'
git remote add origin 远程仓库地址
例如:git remote add origin https://gitee.com/xxxxx/study-git.git
在这里插入代码片 添加文件123.txt,然后git status 查看文件状态
git status
文件是红色,说明还没提交到本地仓库
git add 文件名 -> example:git add 123.txt //添加单个文件
git add -A //添加所有文件到本地暂区
此时文件变成绿色
git rm --cached file example:git rm --cached 123.txt
git rm --cached 文件夹 -r //取消文件夹下所有暂存
git commit fileName -m 'frist commit' //提交指定文件
git commit -m 'first commit' //添加所有文件
git remote add origin '仓库地址' //example:git remote add origin https://gitee.com/xxxxx/study-git.git
git push origin master
如果出现如下错误:
按照提示执行命令就好了
git push --set-upstream origin master
注:如果还出现其他错误参考:https://blog.csdn.net/qq_45893999/article/details/106273214
强制拉取远程代码:(需要先提交本地代码到本地仓库)
git pull --rebase origin master
git branch
git branch -a //能看见远程分支,不带最后一次提交信息
git branch -avv //能看见远程分支,带提交信息
git checkout remotes/origin/master
1)基于本地分支创建新分支
git branch <新分支> example:git branch test
2)基于远程分支创建分支
git branch <新分支名> <远程分支> example:git branch test origin/master
3)基于提交创建分支
git branch <新分支名> example: git branch forCommit e76caa3d6b3e84c43fab3abb81a91a71fdba1990
其实创建分支都是基于提交来创建的
git branch -d <分支名1> <分支名2>
git merge <需要合并过来的分支>
解决冲突
修改保留一个,然后重新add、commit
关联远程仓库
git remote add <新远程名> <新仓库地址> example:git remote add origin2 https://gitee.com/xxxxx/git-study-bak.git
提交到新关联的远程仓库:origin2 的master 分支,下面是这种方式:
git push --set-upstream origin2 master (会改变关联的远程仓库)
git push origin2/git push origin (推送到指定的远程仓库,不会改变默认关联的远程仓库)
注意:如果执行的是上面命令1,此时关联的远程仓库已发生改变, 默认提交到origin2
删除关联的远程仓库
git remote remove <远程仓库名> example:git remote remove origin2
tag和分支概念差不多,只不过它是一个只读的,通常用来做版本(里程碑)
新建tag
git tag <新tag名> example:git tag tag1
基于某个分支建tag
git tag <新tag名> <某个分支> example:git tag tag1 test
基于某个提交简历tag
git tag <新tag名> fddad46fa753ae34b2a6bcd3ee65a23c9dd4a3b5
删除tag
git tag -d tag1
查看详细内容
git log
查看简洁内容
git log --oneline
分支对比
git log test..master (查看master有哪些提交没有提交到test分支)
查看提交网络
查看提交详细
git show //查看当前分支最后一次详细提交
git show master //查看某个分支最后一次详细提交
git show a5d34c5 //查看某次提交详细
底层原理就是像map一样存到hash表里面,key是hash值,value是文件内容
回滚,就是把某一次存储的内容,写到新的文件中,如下,把第一次存储的内容写到文件中
git add 的原理就是将数据存到hash表中,hash的数据存储在 .git/object目录下
根对象对应着文件,使用git cat-file -p 45a4fb75db8可以查看文件对应的历史版本
提交原理,新提交文件的上级跟对象hash值会变,同级和下级的不变。相当于新修改的对象变了,那么也影响上级变了,下级和同级不受影响,所以下级和同级文件的hash值不会变,切换分支的时候,首先会比较不同点,如果文件对应的hash值一样,那么证明这个文件没有修改过,不需要更新,仅仅需要更新hash值变化的文件,这是git快的一个原因。
跟踪两次提交的树对象,可以发现每次提交都记录了当时版本所有文件的快照。注意看,如果当次提交,该文件没有任何修改,那么每次提交时该文件hash值还是一样的!
分支保存在.git/refs/heads目录下,分支和tag的原理就是指针指向指向某个提交纪录
新建分支就是拷贝一份原分支的hash值到新分支文件中
git stash save message /暂存当前修改
git stash list /查看当前所有暂存
git stash apply stash@{num} /应用暂存
git stash drop num/删除对应缓存
git reset head 文件名 /取消该文件暂存
git reset head /取消所有暂存
git checkout -- <filename> (放弃某个文件修改,注意中间有--)
git checkout . 放弃所有文件修改
git branch -a 查看所有分支 (也可以看当前是哪个分支-绿色字体的)
git branch -avv 查看所有分支详细信息 (也可以看当前是哪个分支-绿色字体的)
git branch 查看本地所有分支 (也可以看当前是哪个分支-绿色字体的)
git status /查看我们 工作区的修改的文件
git checkout <分支名>
git remote add <仓库url> /添加远程仓库
git pull 拉取
git push 推送
git branch -b 新的分支名 /切出来以后自动切换到新分支
git add . 暂存更改到缓存区(暂存区文件是绿色的)
git diff HEAD /查看 workspace 和 local repository 的差别
git diff HEAD~X /上X次的代码比较
git update-git-for-windows 更新版本
git merge <要合并过来的分支>
git branch -d <分支名称> //或许删不掉(没有合并,没有解决冲突)
git branch -D <分支名称> //强制删除
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。