git学习笔记

本文详细介绍了Git的核心特点如快照记录、本地操作等,涵盖从基本操作到高级概念,包括文件状态、.git目录、hooks、info、logs、objects、refs和config等,并展示了git命令行的实用技巧,如初始化仓库、分支管理、团队协作等。
摘要由CSDN通过智能技术生成

git特点

直接记录快照,而非差异比较

近乎所有的操作都是本地执行

时刻保持数据完整性

多数操作仅添加数据

文件的三种状态

.git目录

hooks 客户端或服务端的钩子脚本

info 全局性排除文件

logs  日志信息

objects   存储所有的数据内容

refs  存储指向分支的提交对象的指针

config 项目特有的配置选项

description  对仓库的描述信息

HEAD  目前被监测出的分支

index   暂存区信息

区域

工作区

暂存区

版本库

linux命令

clear    清除屏幕

echo “message”      往控制台输出信息

echo “message” > 文件名        生成文件并存储信息

ll      当前目录下的子文件&子目录

find 目录名      目录下的子孙文件&子孙目录

find 目录名 -type f     目录下的子孙文件

rm 文件名     删除文件

mv 更改前文件名 更改后文件名       重命名

cat 文件的Url       查看对应文件的内容

vim 文件的Url 

   i 进入文件编辑模式

   esc -> : 

                 -> q!     不保存强制退出

                 -> wq    保存退出

                 -> set mu  设置行号

底层命令

Git对象

git hash-object -w fileUrl

生成一个key(githash值):value(压缩后的文件内容)存到.git/objects/hash前两位/hash剩余位

tree对象

git update-index --add --cacheinfo 100644(文件模式) githash 文件名

往暂存区添加一条记录,让git对象对应上文件名,存到.git/index

write tree

将暂存区内容生成tree对象,生成一个treehash,存到.git/objects/hash前两位/hash剩余位

提交对象

git commit-tree treehash

生成一个提交对象,生成一个commithash,存到.git/objects/hash前两位/hash剩余位

其余

git cat-file -p hash   查询对象内容

git cat-file -t hash   查询对象类型

git ls-files -s   查看暂存区

高层命令

初始化仓库

git init  

命令行配别名

git config --global alias.自定义名 git命令(不包含git 多个字母用“”包裹)

新增(修改)文件

git status 

git add 文件名 

git commit -m “注释”

修改文件

git commit -a -m “注释” (已追踪的文件可一步操作直接提交对象)

删除文件

git rm 文件名

git status 

git commit -m “注释”

重命名文件

git mv 更改前文件名 更改后文件名

git status 

git commit -m “注释”

查询

git status    查看工作目录中文件的状态 已跟踪 (已提交 已暂存 已修改) 未跟踪

git diff     查看未暂存的修改

git diff --cache   查看未提交的暂存

git log

git log --oneline  查看提交记录

git reflog  查看所有的HEAD变化

分支

分支的本质就是一个提交对象,所有的分支都有机会被HEAD引用,HEAD一个时刻只会指向一个分支,当我们有新的提交的时候,HEAD会携带当前持有的分支往前移动

HEAD指针指向当前分支最新的提交对象,默认指向master,切换分支其实就是让HEAD指向不同的分支

***在切换分支的时候的时候,一定要保持当前的分支是干净的!!!

允许切换分支:

   分支上所有的内容处于已提交状态

   分支上的内容是初始化创建  还在工作区 处于未跟踪状态

(避免)

   分支上的内容是初始化创建  第一次存入暂存区 处于已暂存状态

(避免,此时git为防止内容丢失,会将未提交的内容带到切换后的分支 污染分支内容)

不允许切换分支:

     分支上有的内容处于已修改状态 或 非第一次存入暂存区

   

git branch  查看分支列表

git branch -v 查看分支指向的最新的提交

git branch name 在当前提交对象上创建新的分支

git branch name commithash(版本穿梭时光机)  在指定提交对象上创建新的分支

git checkout name  切换分支

git checkout -b name  在当前提交对象上创建新的分支并切换到新的分支

git branch -d name 删除空的或者已经被合并的分支

git branch -D name 强制删除分支

git log --oneline --decorate --graph --all 查看整个项目的分支图

git merge name   合并分支

    快速合并-->不会产生冲突

    典型合并-->有机会产生冲突

                      解决冲突-->打开冲突的文件进行修改后  add  commit  成功即合并

git branch --meged  查看哪些分支已经合并到当前分支,删除已合并分支

git branch --no-meged  查看哪些分支还未合并到当前分支,决定是否删除分支

存储

当前未完成工作的分支需要切换到其他分支,避免无谓提交,将其进行存储,实际上存储也是做了一次提交,但可让log不显示此次提交

git stash 将未完成的修改保存到一个栈上

git stash list  查看存储列表

git stash apply   将栈顶的工作内容还原  但不让其出栈

git stash apply 存储名  将指定的工作内容还原  但不让其出栈 存储名可通过git stash list 查看

git stash drop 存储名  删除指定的工作内容

git stash pop  还原并删除栈顶工作内容

后悔药

撤销实质上是重置

git restore <file>  (git checkout --filename)  撤销工作区目录的修改  --hard

git restore --staged <file>  (git reset HEAD filename)撤销暂存  --mixed

git commit --amend       撤销提交  --soft

内容有错,重新提交

注释写错,后悔药更改日志显示

内容忘记加到暂存区,先 git add 文件名 再 git commit --amend,日志覆盖最新的一次提交  

reset三部曲(HEAD)

HEAD~后退一步  reflog查找commithash后退到指定位置

$ git reset --soft HEAD~   让HEAD指向后退,工作区暂存区内容不变 (用commithash内容重置HEAD内容)

$ git reset --mixed HEAD~   $ git reset HEAD~  HEAD指向后退,暂存区也改变 (用commithash内容重置HEAD内容 重置暂存区)

$ git reset --hard HEAD~   HEAD 暂存区 工作区三个都改变

(用commithash内容重置HEAD内容 重置暂存区  重置工作目录)

路径reset

所有的路径reset都要省略第一步重置HEAD,HEAD本质是指向一个分支,分支的本质是一个提交对象,一个提交对象是一个tree对象的包裹,tree对象是多个git对象的快照,一个git对象对应一个文件,HEAD代表了多个文件的状态,单个文件的reset不能代表HEAD的reset

git reset --mixed commithash filename  只改变暂存区,撤销暂存操作

(用commithash中filename的内容重置暂存区)

git reset --hard commithash类似于git checkout branchname,相同点,都重置了HEAD,暂存区,工作目录。不同点,checkout的HEAD不会带着分支一起移动,checkout对工作区内容安全,不会丢失,reset会强制覆盖工作区内容

git checkout commithash filename  重置暂存区 重置工作目录

git checkout --filename 只动工作目录

打tag

git tag   列出标签

git tag tagname commithash    创建标签 不加hash默认最新提交对象

git checkout tagname     检出标签(HEAD和分支分离)

git checkout -b tagname    检查版本标签并切换到分支

团队协作

1.项目经理初始化远程仓库(github上操作)

2.项目经理创建本地仓库

   git remote 别名 仓库地址(https)

    初始化git  git init 

    修改用户名 修改邮箱  

    git add ./  git commit

3.项目经理推送本地仓库到远程仓库

    清理windows凭据

    git push 别名 分支 (输入用户名 密码;推完之后会附带生成远程跟踪分支)

4.项目经理邀请成员加入协作

5.成员克隆仓库

    git clone 仓库地址(在本地生成.git文件  默认为远程仓库配了别名origin,自动生成master本地分支,并且已经跟踪了对应的远程跟踪分支origin/master)

6.成员做出贡献

   git add

   git commit

   git push 别名 分支  (输入用户名 密码;推完之后会附带生成远程跟踪分支)

7.项目经理更新修改

   git fetch 别名 (将修改同步到远程分支上)

  git merge 远程跟踪分支

本地分支 远程跟踪分支   远程分支 

本地分支的数据推送和拉取

拉取数据

   git fetch 别名 (将修改同步到远程分支上)

   git merge 远程跟踪分支

上传数据

   git push 别名 分支

本地分支跟踪远程跟踪分支

1.克隆的时候 自动生成master本地分支,并且已经跟踪了对应的远程跟踪分支(别名/master)

2.在新建分支时,可以指定该分支想要跟踪的远程跟踪分支(git fetch 别名 拉取仓库中远程跟踪分支)

  git checkout -b 本地分支名 远程跟踪分支名  &   git checkout --track 远程跟踪分支名

     git branch -vv  查看设置的所有跟踪分支

3.将一个已经存在的本地分支跟踪一个远程跟踪分支

 git branch -u 远程跟踪分支名

本地分支已经跟踪了远程跟踪分支可简化命令

拉取数据 git pull

上传数据 git push

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值