git基本概念
git通过快照保存文件,管理文件修改信息。提交更新或保存项目状态时,会对更改的文件创建一个快照并保存这个快照的索引;对没有修改的文件,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。
Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。
- 已修改表示修改了文件,但还没保存到数据库中。
- 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 版本库。
- 工作区:本地电脑里的项目文件,就是代码。
- 暂存区:英文叫 stage 或 index。一般存放在项目中的 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
".git/objects" 目录下,里面包含了创建的各种对象及内容。git add 命令将工作区修改的文件快照保存到objects中,同时更新缓存区index。git commit 将保存在暂存区域的文件快照索引转储到 git 目录中数据库。
目前为止,三种状态都在本地电脑,还没有提交到远程仓库。git本地仓库是把拷贝远程仓库所有的内容,包括暂存区和版本库(/.git文件夹)。
git基本操作
设置本地项目使用git管理版本
git init
git add .
git commit -m "版本1"
git init会在当前目录创建 .git文件夹,里面包含用来版本管理的一系列文件。git add 和git commit将当前文件提交到git开始管理。
克隆远程仓库
git clone -b dev https://github.com/libgit2/libgit2.git mygit
指定克隆远程dev分支到本地mygit文件夹,也可以省略。
文件操作 | git add [文件/文件夹] | 将文件添加到缓存区 |
git . | 添加所有文件 | |
git commit [文件] -m ‘新版本’ | 提交到本地仓库 | |
git commit -am '修改 hello.php 文件' | 不用add,将工作区提交到本地仓库 | |
git checkout . | 用暂存区内容替换工作区,会丢失已经修改的代码 | |
分支操作 | git push | 将本地分支推送到远程分支 |
git push origin 本地分支:远程分支 | ||
git push -u origin master | 推送到远程master分支,并关联远程分支。第一次提交时使用。 | |
git pull | 将远程分支拉取到本地 | |
git pull origin 远程分支:本地分支 | 拉取远程新分支 | |
git branch dev | 创建dev分支 | |
git branch | 显示分支列表 | |
git branch -d dev | 删除dev分支 | |
git push origin --delete dev | 删除远程dev分支 | |
git checkout dev | 切换dev分支 | |
git checkout -b dev | 新建dev分支并切换 | |
git checkout -b dev origin/dev | 拉取远程仓库的新 dev分支 | |
git push --set-upstream origin dev | 本地新分支dev提交到远程 | |
git merge test | 将test分支合并到当前分支 | |
仓库操作 | git remote add origin 链接地址 | 本地仓库关联远程仓库 |
git remote -v | 查看关联的远程仓库 | |
git remote rm origin | 删除远程关联 |
git使用的问题处理
一、git pull 本地代码修改会拉取失败,Please commit your changes or stash them before you merge.
- git stash 先将未提交的代码保存到堆栈中
- git pull 拉代码
- git stash pop 将堆栈中的代码取到工作区
git reset --hard | 撤销工作区中所有未提交的修改内容,回到上一次版本,并删除之前的所有信息提交,不可恢复。 |
git stash | 将所有未提交的修改(工作区和暂存区)保存至堆栈中。 |
git stash pop | 把刚才stash到本地栈中的代码pop到本地 |
二、关联A仓库的分支代码要提交到B仓库,git push,会提示要拉取最新的代码。git pull,会提示
fatal: refusing to merge unrelated histories
,意思就是拒绝合并不相关的历史。
使用下面命令,允许不相关的历史记录:
git pull origin2 master --allow-unrelated-histories
后续继续更新!
参考: