git基础知识
# git(分布式版本管理系统)## 创建仓库
仓库其实就是你需要跟踪管理的文件夹。
成功创建仓库之后,目标文件夹下面有一个.git的隐藏文件夹,这个文件夹是用来管理文件的,不可以一改动。
### git init
在目标文件夹下面,运行git init完成仓库的创建。
tips: git只能跟踪文本文件。
### 添加文件到仓库
- 第一步:git add 文件/*
- 第二步:git commit -m "msg"
提交文件到仓库
## 查看仓库状态
### git status 查看仓库状态,哪些
文件被修改过。
### git diff 查看修改的内容
对比做了哪些修改
## 版本回滚
### 当前版本用HEAD表示
- HEAD^ 表示上一版本
- HEAD^^ 表示上上一版本
- HEAD~n表示之前的第n个版本
例如前第一个100个版本:
HEAD~100
### 在步同版本之前切换
git reset --hard commit_id
### 查看版本操作记录
- git log 打印commit 记录
git log pretty='oneline' 简化commit 打印记录日子
- git reflog查看命令历史
### 什么是工作区
- 工作区就是被git init初始化后你能看到的工作目录,隐藏文件夹.git不是工作区,这是git的版本库,里面包含了stage (暂存区)默认创建的master分支、HEAD指针。
### Stage缓存区
- 在.git文件夹下包含一个非常重要的Stage即缓存区,所有修改的文件要提交到版本库,必须先把文件放到缓存区,缓存区的文件将一次性commit到当前对应的分支里。
- commit之后,如果没有对工作区的文件做修改,此时的缓存区是干净的,可以通过git status查看当前状态。
### 管理修改
- git对文件修改的管理方式修改后的文件
只有add到缓存区才可被提交,git跟踪的是文件修改而不是文件本身。
### 撤销修改
- 修改的文件未提交到暂时区
- 第一种方式:手动恢复修改过的文件内容
- 第二种方式:git checkout -- 文件名
该操作将把文件撤回到最近一次commit
的状态。
- 已提交到缓存区
- 第一步:运行git reset HEAD 文件名
把修改从缓存区撤回到工作区
git rest可用于回退版本,git rest --hard commit_id
同时也可以用于将缓存区的文件撤回到工作区
git rest HEAD 文件路径/文件名
- 第二步:git checkout -- 文件路径/文件名
### 删除文件
- 未添加到版本库的文件是不能用git恢复的
- 删除文件的选择
- 确实需要从版本库中删除该文件
运行如下命令:
git rm文件路径/文件名 或者
git add 文件路径/文件名
最后git commit
- 误删除的情况,直接运用
git checkout -- 文件,撤销删除操作
### 远程仓库
作为分布式版本控制系统,同一个git仓库可以分布在不同的机器上。允许自己和有权限的成员克隆远程仓库到本地,也可以拉取别人修改的文件,还可以把自己的文件推送到远程。
常见的远程Git 仓库服务平台有github、码云等。
- 添加远程仓库
- git remote add 远程仓库名字远程仓库地址
- 远程仓库的名字可以自己设置城任意字符串
- 远程仓库地址可以是http的 也可以是ssh的,一般都是用ssh的,用ssh的仓库地址需要在仓库添加自己的公钥。
- 操作远程仓库
- 向远程仓库推送代码
- git push 远程仓库名 分支名
例:git push origin master
- 克隆远程仓库到本地
- git clone 远程仓库地址
克隆就是把远程仓库复制一份快照到本地。
- 拉取远程仓库内容
- git pull 远程仓库 想要拉取的分支名
例:git pull origin master
## 分支管理
### 创建分支
git branch 分支名
### 切换分支
git checkout 分支名
### 创建并切换分支
git checkout -b 分支名
### 查看分支:git branch
查看所有分支包括本地和远程分支:
git branch -a
### 合并某分支到当前分支
git merge 分支名
- 快速合并模式
Fast-forward
Fast-forward 模式合并只是把指针移动最新的指针处。
适用于Fast-forward合并的情况例如:
从master分支创建一个分支 debug,在debug分支编辑完成提交完成,切回master分支,如果master分支上的内容自从创建debug分支后没有做任何编辑包括没有其他人提交或合并内容在master分支上,此时在master分支运行:
git merge debug ,这次merge将采用
Fast-forward模式合并,即把master的HEAD指针直接移动到debug最新的提交点。
- 解决冲突
合并发生冲突是因为两个分支对同一个文件的做了修改,git不知道以那个为主,必须要你手动解决。发生了冲突的合并是不能通过Fast-forward合并的,只有手动解决完了冲突之后,git会结合两个分支的内容提交到一个节点。
- 查看分支合并图:
git log--graph
### 删除分支
git branch -d 分支名
## 分支管理策略
### 强制禁用Fast-forward合并
git merge --no-ff -m "msg" 分支
禁用ff合并,git会在合并后生成一个新的
commit
### 分支管理的策略一般把master作为一个稳定的分支,用于版本的发布。协作开发和成员代码合并在dev分支进行。最后在统一将dev分支合并到master主分支上。
## bug分支
### 要解决那个分支上的bug就在那个分支上创建bug分支
## 存储
### 当前分支工作还未完成,但需要切到其他分支解决bug,你可以提交当前分支的修改后在切到其他分支修bug,还有一种方式(比较推荐)把当前分支工作区修改存储起来,这里就用到git的存储功能
- 把当前工作区存储:
git stash
- 查看存储区的内容:
git stash list
- 恢复储存区内容
- git stash apply
恢复工作区内容,但stash内容并不会被删除
- git stash drop 删除存储区内容
- git stash pop
恢复并删除工作区内容
- 可以多次git stash,被存储的内容益堆栈形式存储起来,即git stash drop /git stash apply时默认恢复第一个存储的内容,可以指定存储区id恢复指定版本的存储内容,例如:
git stash apply stash@{1}
## 开发新功能的分支
### 要开发新功能,最好创建一个feature分支
### 强行删除一个分支:
git branch -D 分支名
## 多人协作
### git remote -v 查看远程库信息
### 从本地推送分支git push origin 分支,如果失败先git pull再推送。如果git pull 有冲突,解决冲突后再push。可以用git push -f origin 分支 强行把本地分支推到远程,该-f命令表示推送的分支内容以本地推送的为主。
### 在本地创建和远程对应的分支:
git checkout -b 分支名 origin/分支名
### 建立本地分支与远程分支的联系
git branch --set-upstream 分支名 origin/分支名
### 从远程抓去分支
git pull
## rebase
### 把分叉的commit整理成一条直线,
缺点是rebase后本地的commit 记录会被修改。
6666666666
页:
[1]