文章目录
版本回退
1. 回退到指定版本
// 回退到上一版本是HEAD^ , 上上一版本是HEAD^^
// 也可以简化成 HEAD~2 : 后面的数字代表回退几次
git reset --hard HEAD^^
// 或者如下
git reset --hard HEAD~2
// 或者后面跟commit id 这样就是恢复到指定的commit
// 这里的commit id 不一定指历史版本,
// 当你知道你删除的提交的commit值,也可以用来恢复你删除的数据
git reset --hard d08e72
2. 查找所有的操作记录
git reflog
// 下面展示的是所有你的操作记录以及包括commit值
d08e72f (HEAD -> master) HEAD@{0}: reset: moving to d08e72f
1145400 HEAD@{1}: commit: 删除test文件
d08e72f (HEAD -> master) HEAD@{2}: reset: moving to d08e72f
2275ebd HEAD@{3}: reset: moving to HEAD~1
d08e72f (HEAD -> master) HEAD@{4}: commit: hahah
2275ebd HEAD@{5}: commit: 格式化代码
93585d4 HEAD@{6}: reset: moving to 93585d4
8b00dfa HEAD@{7}: reset: moving to 8b00dfa
8b00dfa HEAD@{8}: reset: moving to HEAD^
93585d4 HEAD@{9}: commit: add test
8b00dfa HEAD@{10}: commit: mod asdt.txt
aa3ea1b HEAD@{11}: commit (initial): first commit
撤销修改
1. 修改了工作区的内容,但是还未进行 add 操作
// 该命令表示 把readme文件在工作区修改的内容全部撤销掉
git checkout -- readme.txt
2. 修改了工作区的内容,并且进行了add操作,添加到了暂存区
// 把暂存区修改的内容撤销掉,重新放回工作区
git reset HEAD readme.txt
// 然后调用第一步中 checkout的命令 丢弃工作区中的修改就可以了
3. 修改了工作区的内容,并且进行了add和commit的操作,但是没有推送到远程
// 这个时候就只能进行版本回退了
git reset --hard HEAD~1
// 或者 代表回退到上一版本
git reset --hard HEAD^
删除文件
1. 删除工作区和仓库中的文件
// 1. 删除工作区的文件
rm test.txt
// 2. 从版本库中删除
git rm test.txt
// 3. 并提交这次记录
git commit -m "del test.txt"
2. 工作区的文件给误删了
// 该命令就是把版本库中的版本替换工作区中的版本
git checkout -- test.txt
添加远程仓库
1. 配置ssh秘钥
- 根据邮箱生成秘钥
// 该命令是 在本地生成秘钥 目录是在 ~/.ssh/ 下面
ssh-keygen -t rsa -C "test@qq.com"
// 执行完上面的命令 会生成id_rsa和id_rsa.pub两个文件
// 我们需要把id_rsa.pub中的公钥配置到GitHub上
➜ learngit git:(master) ✗ tree ~/.ssh
/Users/liujingping/.ssh
├── id_rsa
├── id_rsa.pub
└── known_hosts
- 在GitHub上添加SSH keys就行了
2. 把本地仓库推送到远程仓库
// 1. 关联到远程擦那个苦
// 这里需要把 ljp345775 替换成自己的账户名
// 这里的origin 是默认的远程仓库的名字
git remote add origin git@github.com:ljp345775/learngit.git
// 2. 把本地内容推送到远程
git push -u origin master
// 这个是删除本地和远程库的关联,远程库还存在
git remote rm origin
3. 首先创建远程库,并克隆到本地
// 从远端克隆到本地
git clone git@github.com:ljp345775/learngit.git
创建合并分支
1. 创建分支
// 查看分支
git branch
// 创建分支
git branch dev
// 切换分支
git checkout dev
git switch dev
// 创建并切换分支
git checkout -b dev
git switch -c dev
2. 合并分支
// 合并分支 合并dev分支到当前分支
git merge dev
// 删除分支
git branch -d dev
// 删除 为合并代码的分支
git branch -D dev
注意
当和并分支的时候没有冲突的时候,可能会使用Fast forward模式来进行合并,
demo git:(master) git merge dev
Updating 4effb33..5b5e241
Fast-forward
a.txt | 1 +
test.txt | 1 +
2 files changed, 2 insertions(+)
create mode 100644 a.txt
当使用该模式的时候,合并完分支以后,删除分支,就会丢失分支的信息,如下图:
此时我们可以禁用Fast forward模式,代码如下
// --no-ff参数,表示禁用Fast forward
// 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
git merge --no-ff -m "merge with no-ff" dev
合并后,在分支信息中就会看到新的提交信息,如下图:
推送分支 拉取分支
// 把本地分支推送到远端
git push origin master
// 推送其他分支到远程,如果远端没有,就会创建
git push origin dev
// 当本地没有远程的分支时
// 该命令是把远程分支拉取到本地
git checkout -b dev origin/dev
// 从远程远程抓取最新的代码
git pull
// 当本地分支和远程分支没有进行关联的时候 需要运行下面的命令
git branch --set-upstream-to=origin/dev dev
储藏代码 stash
// 该命令是把工作区和暂存区中的未提交的内容全部储藏起来,存储在了堆栈中
git stash
// 从stash中 取出
// 方法一:
// 恢复内容,但是stash里面的不会删除
git stash apply
// 调用一下命令进行删除
git stash drop
// 方法二:
// 恢复的同时把stash内容也删了
git stash pop
摘取代码 cherry-pick
// 该命令表示 把 6cf7f 这次的提交放入当前分支中并生成新的提交
git cherry-pick 6cf7f