Git
前置知识
分支:一个指向特定提交记录的引用
指针:当前操作位置的引用
本地指针:我们能操作位置的引用
基本操作
拉取分支
git clone [url] <目录名>推送变更到远程仓库
git push
注意:如上图所示,将 4 推送到仓库需要
remote仓库的HEAD指向非master分支或指向hash将远端镜像更新到本地【注:本地head指向并没有发生改变】
git fetch
需要手动合并分支:
git merge origin/[分支名]获取变更并合并【注:本地head会指向最新变更】
git pull相当于:
git fetch和git merge origin/[分支名]分支
创建分支:
git branch [分支名]切换分支:
git checkout [分支名]HEAD指向提交记录:git checkout [hash]/--detach,该操作会直接让HEAD直接指向hash创建分支并切换:
git checkout <远程分支名> -b [分支名]删除分支:
git branch -d [分支名]切换远程分支:
git checkout [远程分支名],注意该切换会直接将HEAD指针指向hash,如下图
暂存区
添加到暂存区:
git add [文件路径]/[.]交互式add,允许提交文件内容的一部分:
git add -i移除暂存区:
git restore --staged [文件路径]/[.]还原文件:
git restore [文件路径]或git checkout [文件路径]提交变更
git commit -m "描述"替换最新变更:
git commit --amend
通过
--amend命令将master引用指向新的提交,上图为4变更为4'当
--amend命令触发COMMIT_EDITMSG编辑时,可通过ESC推出编辑模式,然后按两次大写Z退出合并分支
git merge [分支名]当merge发生冲突并解决时:
git add .然后git merge --continue非
Fast-forward合并:git merge [分支名] --no-ff
reset 引用回退
git reset <mode> [hash]mode 类型有:
- –soft:使分支和
HEAD回退到指定commit并保留所有变更在非暂存区 - –mixed 默认模式:使分支和
HEAD回退到指定commit并保留所有变更在暂存区 - –hard:使分支和
HEAD回退到指定commit并移除所有变更
注意:可以通过
reset回退到git reflog里的任意记录- –soft:使分支和
rebase 调整提交过程
git rebase [分支名]/[hash]
如果想将branch的提交记录变更为:
1 - 2 - 3 - a - 4 - 5的形式通过
git rebase master进行调整当
rebase发生冲突并解决时【注:再次冲突重复冲突操作即可】git add .git rebase --continue修改提交历史,即代码有没有冲突,都要求一步一步编辑历史,如:
3 - 4 - 5git rebase -i [分支名]/[hash]会要求对每一步都进行类冲突处理
revert 反向操作,会全部还原成指定hash的前一个提交的状态
git revert [分支名]/[hash]获取其它分支的提交内容
git cherry-pick [hash1、hash2、hash3]查看差异
git diff:查看未缓存的改动git diff --staged:查看缓存区与HEAD的改动git dif [hash1] [hash2]:对比两次提交的差异查看日志
git log <--oneline> <--pretty=oneline> <--graph> <--all>查看状态
git status查看提交的内容
git show [hash]创建 tag
git tag [tag名称] <-a>-a 选项为增加描述
查看引用历史
git reflog
配置
查看配置
git config --list查看用户名
git config user.name查看邮箱
git config user.email全局配置用户名
git config --global user.name "name"全局配置邮箱
git config --global user.email "eamil@gmail.com"
扩展(得练习并验证)
给本地仓库添加远程仓库【注:该远程仓库可以是其它本地仓库或其它电脑的仓库】
git remote add <给个远端仓库名> <名称>@<ip>:<远端仓库目录>git push <远端仓库名> <分支>:<分支>:得验证分支到底那个是创建,那个是本地
问题:
提交完发现写错了?
- 第一种:刚提交完,发现有错
git commit --amend
- 第二种:非最新提交,发现有错
git rebase [hash]
- 第三种:已经push到远程仓库,发现有错
git revert [hash]