常看常新吧
学习网址 learngitbranching.js.org
借鉴博客:http://blog.haohtml.com/archives/18265
项目提交树上移动
是否分离HEAD?
不分离:HEAD->你正在其基础上进行工作的当前分支最近提交记录(当前分支位置=HEAD位置),分支总是指向自己的最近提交记录(当然也有指令强行让他指向别的地方)
分离:eg git checkout 位置
指示一个提交记录的位置
- 相对记录 master^ HEAD^^ HEAD~3
- 哈希值 见git log
git checkout
git checkout branch 切换分支
git checkout 位置 分离HEAD,移动HEAD
对分支的理解
指针,指向最近记录,所以和HEAD都可以做相对引用的参照。
理解:我想基于这个提交以及所有父提交进行新的工作
git branch -f master HEAD~3 强行移动分支,让他指向别的地方
-f 强行让分支指向另一个提交
PR:pull request实际就是分支对分支,一次PR,之后在分支上动手即可
git rebase 和 git merge
git rebase:线性的提交记录
git merge:两个爹
多用git rebase
这个还有深入学习的余地,常看常思考
git rebase 提交记录仍存在,看起来顺序开发实际并行开发。
撤销变更
git reset
本地,分支回退,该写历史,仿佛未提交
参数
另外大家嫌不好记得话,只要记住执行 soft 模式后(回到stage暂存区状态),如果再次将原来的文件添加到仓库的话,需要git commit 一个命令就可以了。而 mixed 模式(回到workspace状态)需要执行git add 和 git commit 两个命令。对于 hard 模式来说是一种硬恢复,导致部分数据丢失,尽量不要用(可以使用git reflog 来恢复)。
同时如果想将此文件从索引区中取消的话,只需要执行 git reset HEAD <文件> 命令就可以了
git revert
远程
git cherry-pick 提交号(hash)
git rebase -i
不常用,记录一下
远程操作
origin/master
保持同步,与远程repo通信
git branch -r可以看到remote 分支
获取
git fetch
不够,最终的目的是合并,上传,能用。
git pull = git fetch+git merge
git pull --rebase =git fetch +git rebase
远程仓库
- git remote git remote -v看远程仓库
- git remote add 添加远程仓库
- git remote show <remote仓库名>
- git remote rename 原来名字 新名字 重命名
- git remote rm xxx
- git remote update
git remote update will update all of your branches set to track remote ones, but not merge any changes in.
git fetch will update only the branch you’re on, but not merge any changes in.
工作遇到的问题
建立pr之后发现commit有一个多余文件
查阅资料之后做了如下操作
git reset --mixed HEAD~1
git add xxx
git commit -m ' '
git stash
git stash 不想要脏提交但是这个文件也不想commit又不能直接删
(这一部分理解不深刻,以后继续深入)
git rm --cached vs git rm vs rm
本地不删stage暂存区删
本地删,提交纪录删
本地删,提交记录没管 rm之后可git rm
总结
继续深入学习吧
工作中遇到了记录一下
工具,善用,不要被他束缚,捆绑