Git学习

Git版本控制器——记录每一次修改以及版本迭代的一个管理系统

可以控制电脑上所有格式的文档

linux下配置git

centos

当前是否安装git命令        git --version

卸载git命令                       sudo yum remove git -y

安  装git命令                        sudo yum install git -y

git基本操作

配置本地仓库        

创建本地仓库        git init          创建.git文件         可以用tree查看.git分支

配置用户名        git config user.name "  "

配置邮箱           git config user.email "    "

查看配置        git config -l

删除配置        git config unset user.name         git config unset user.email

全局配置        git config --global user.name " "

删除全局配置        git config --global --unset user.name" "

用户姓名邮箱要对应码云用户名@以后的 和码云的邮箱

认识工作区、暂存区、版本库

工作区:写代码和文件的目录

暂存区(stage/index):一般存放在.git目录下的index文件(.git/index)中,我们把暂存区有时也叫做索引

版本库:即仓库。工作区有一个隐藏目录.git,它不算工作区,而是Git的版本库。这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时候都可以追踪历史,或者在将来还原。

object:对象库,修改的工作区内容会写入对象库的一个新的git对象中

添加文件       

添加指定文件 git add 文件名

                      添加当前目录下所有文件  git add .

添加描述        git commit -m “描述”

提交记录日志        git log        简易显示        git log --pretty=oneline

提交文件.git的变化

通过commit id查看文件指令:git cat-file -p 79931091b9d88e80b66b8e92868933b7b57ed0d5

[root@iZ0jlicx4mlu7p01u4m4tuZ gitcode]# tree .git
.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── pre-merge-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   ├── push-to-checkout.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master
├── objects
│   ├── 07
│   │   └── 5277083bbdfe95d4181675c8c335c5a5c8cb72
│   ├── 0e
│   │   └── 6b1780b73cd9220ec5073dc64b42f7ad4bd945
│   ├── 79
│   │   └── 931091b9d88e80b66b8e92868933b7b57ed0d5
│   ├── 8d
│   │   └── 0e41234f24b6da002d962a26c2495ea16a425f
│   ├── cb
│   │   └── 6d5a042adc7874f7d4ee68ed21025dab3a2be9
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags
 

通过.git的内部树状结构来看,

index存放add新增文件内容,HEAD是一个指针指向了refs/heads/master,refs/heads/master存放了最新提交的commit id

commit id可看做是一个索引,索引的是一个git对象,对象是维护在对象库中。

修改文件

Git追踪管理的修改,而不是文件。

查看当前仓库状态的命令:git status

显示暂存区和工作区差异命令:git diff 文件名

a/ReadMe 表示的是改动前         b/ReadMe 表示的是改动后

版本回退

版本回退命令:git reset [--soft | --mixed | --hear] [HEAD] 本质是回退版本库中的内容。

工作区和暂存区是否回退取决选项

--soft选项        只回退版本库内容

--mixed选项(默认选项)        版本库和暂存库内容回退

--hard选项                工作区、版本库、暂存区都回退

git reset HEAD回退到当前版本 HEAD^上一个版本 HEAD^^上两个版本

回退日志:git reflog

撤销修改

撤销的目的不影响远程仓库

情况一:对于工作区的代码,还没有add

将工作区文件回退到最近一次add:git checkout -- 文件名

情况二:add了  但没有commit

使用版本回退 回退到当前版本         git reset HEAD 

再使用git checkout -- 文件

情况三:  完成了add和commit

git reset --hard HEAD^

删除文件

1 rm 要删除的文件名

2 git add 要删除的文件名

3 git commit -m "描述"

或者 git rm 要删除的文件名         git commit -m " " 

分支管理

创建分支

查看当前本地所有分支        git branch

HEAD可以指向分支  被指向的分支就是当前正在工作的分支

创建分支命令      git branch 分支名

切换分支

命令 git checkout 分支名

创建并切换分支指令:git checkout -b 分支名

合并分支

把dev分支合并到master分支

1切换到master分支

2使用合并分支指令        git merge 分支名

合并时不使用fast forward模式 git merge --no-ff  -m  "描述"   分支名

删除分支

删除分支只能在其他分支删除它

命令: git branch -d 分支名

合并冲突

合并冲突需要手动解决 并进行一次提交

图示化查看提交指令 git log --graph -abbrev-commit

bug分支

将所在分支工作区的内容进行保存        git stash

git stash 只能保存被.git追踪管理的文件

git stash list 查看stash区存储了什么文件

将保存在stash的内容释放 git stash pop 

一个分支点分出两个分支一个修bug一个新业务,bug修完合并,新业务代码合并主分支时应先用业务代码合并主分支如果有冲突解决冲突保证不出错,然后主分支合并新业务不会发生分支冲突

强制删除分支

指令 git branch -D 分支名

远程操作

新建远程仓库

远程仓库有自己的成员,一般来说管理者、开发者、观察者、报告者

Issues模板文件:让有问题的人与当前仓库成员进行交流

 Pull Requests模板文件:开发者进行一个合并申请单给仓库管理员

克隆远程仓库

一 HTTPS

指令 git clone https网址

这个命令不能在本地仓库执行即文件夹已经有.git

origin是远程仓库的默认名字

git remote指令可以得到远程仓库的默认名字

git remote -v 指令可以获取更多远程仓库信息

二 SSH 使用公钥加密 公钥登录

在root用户.ssh文件夹内创建id_rsa 和 id_rsa.pub

使用命令ssh-keygen -t rsa -C "自己邮箱"

向远程仓库推送 push

git add 文件名

git commit -m "描述"

git push origin(远程仓库名) master(本地分支名):master(远程分支名) (如果本地分支名和远程分支名一样可以不写:master) 

拉取远程仓库 pull

pull是拉取加合并

git pull origin(远程仓库名) master(远程分支名):master(本地分支名) (如果本地分支名和远程分支名一样可以不写:master) 

忽略特殊文件

.gitignore模板

创建.gitignore 

编辑*.so *.ini 等等就忽略这些文件

git add -f 文件名 可以强制提交 

!b.so可以不忽略b.so b.so 可以上传

git check-ignore -v 文件名         查看此文件为什么被忽略

配置命令别名

例如:git status 起别名为 git st

命令 git config --global(全局) alias.st(别名) status(原名)

git log --pretty=oneline --abbrev-commit

起别名

git config --global alias.lpa 'log --pretty=oneline --abbrev-commit'

                                                       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值