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 - 5
git 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]