git tutorial
Git基本概念
Git将文件的状态分为三类,包括workding directory, index 和 HEAD。
- 任何未被git进行管理的文件成为working directory
- 通过git add操作将文件纳入git管理,此时称之为index/staging(临时)
- 通过git commit操作将转为HEAD状态
HEAD状态的文件可以传输到remote的仓库,对于从本地开始新建的git项目,通过git remote add origin ssh_url(给远程仓库取了名称叫做origin);对于git clone的项目, git已经知道要push的remote repo。
Git初始化
Git初始化包括多中场景:
- 从本地已有的文件夹添加git,使用git init,会在本地生成.git文件夹
- 从远程clone已经建立好的git仓库,会在本地生成.git文件夹,并添加remote
拉去coworker的操作
- git pull将远程仓库的所有内容拉到本地。等价于git fetch + git merge。使用–rebase将第二个操作从merge改为rebase
分支:将自己的操作上传到独立的分支,在分支进行代码版本管理,最终与master分支合并
- git branch brand_name 创建分支
- git checkout brand_name 切换到分支
- git checkout -b brand_name 创建分支并切换
- git branch -d 删除分支
- git push origin :brand_name 删除远程分支
- git merge brand_name 在master分支下合并brand_name分支
- git rebase brand_name
merge 将分支与master合并:使用git merge brand_name将brand_name的分支合并到由checkout切换到的当前分支。 比如在master分支下执行git merge brand_name,会将brand_name分支的内容通过fast-forward(master分支相比于brand_name没有任何更新)的方法合并到master上(master的HEAD直接移动到brand_name的HEAD上),如果master分支有更新别的内容,合并到master时会自动生成一次commit(master和brand_name的HEAD合并到下一个共同的HAED结点).
rebase 不同于merge将master HEAD移动到分支HEAD结点,或者建立master和branch的共同子结点的方法;rebase是将branch“平移”到master分支后,最终形成一条直接。
merge是将两个分支的修改合并到一起,rebase是提取当前分支的修改,复制到目标分支的最新提交后。
修改提交
- git add somefile.py + git commit –amend 把对somefile文件的修改合并到上一次commit中
- git reset –hard HEAD~~ 用来撤销全面两次commit, ~~或者~2表示往前追溯两代
- git rebase -i HEAD~~ 用来合并最近两字提交,将需要被合并的commit前的pick改为squash