git学习笔记

创建版本库

  1. 初始化一个Git仓库,使用git init命令
  2. 添加文件到Git仓库,分两步:
    • git add <file>
    • git commit -m <message>

时光机穿梭

版本回退

  • git reset - - hard HEAD^ 回退到上一个版本
  • git reset - - hard 1094a 回退到最新版本(窗口未关看到commit id)
  • git reflog 记录每一次命令

工作区和暂存区

图例

管理修改

每次修改先git add到暂存区,那就不会commit

撤销修改

git checkout - - <file> 文件在工作区的修改全部撤销
git reset HEAD <file>

删除文件

  • 确实要从版本库中删除文件,那就用命令git rm 删掉,并且git commit
  • 误删,版本库里还有,可以恢复到最新版本git checkout — <file>

分支管理

创建与合并分支

  • 查看分支:git branch
  • 创建分支:git branch <name>
  • 切换分支:git checkout <name>
  • 创建+切换分支:git checkout -b <name>
  • 合并某分支到当前分支:git merge <name>
  • 删除分支:git branch -d <name>

分支冲突

  1. 查看冲突内容
  2. 修改之后
    • git add <file>
    • git commit -m ‘conflict fixed’
  3. 删除分支 git branch -d <name>

分支管理策略

合并分支时,git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。强制禁用Fast forward模式,Git就会在merge时生成一个新的commit.

  • git - -no-ff -m “merge with no-ff” dev
  1. 主分支Master(公测)
  2. 开发分支Develop(内测)
  3. 临时性分支
    • 功能分支(feature)分支
    • 预发布分支(release)分支
    • 修补bug分支(fixbug)分支

注意:master分支非常稳定,仅用来发布新版本;dev分支是干活分支.

bug分支

  当接到代号101的bug任务时,创建issue-101,但当前的dev分支上进行的分支工作还没有提交。工作进行到一半没法提交,但bug必须在2小时内修复。
  Git提供了stash功能,可以把当前的工作现场存储起来,等以后恢复现场后继续工作:

1
2
$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge
  1. git stash
  2. git checkout master
  3. git checkout -b issue-101
  4. 修复bug
  5. git add <file>
  6. git commit -m ‘fix bug 101’
  7. git checkout master
  8. git merge —no-ff -m ‘merge bug fix 101’ issue-101
  9. git checkout dev
  10. git stash
  11. git stash list
  12. git stash apply <stash@{0}>
  13. git stash drop
  14. git stash pop

feature分支

  添加一个新的功能,最好新建一个feature分支,在上面开发,完成后,合并,最后删除该feature分支.

  1. git checkout -b feature-vulcan
  2. git add vulcan.py
  3. git commit -m ‘add feature vulcan’
  4. git checkout dev
  5. 新功能取消,彻底销毁。git branch -D feature-vulcan

多人协作

  • 查看远程 git remote -v
  • 推送分支 git push origin master/dev (master,dev分支需要与远程同步,bug分支只需要本地修复,feature取决于是否推送到远程)
  • 抓取分支 git pull origin master/dev
  1. 首先,可以试图用git push origin &lgt;branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

rebase

  • git rebase 把分叉的提交历史整理成一条直线

标签管理

  发布一个版本时,同化成那个先在版本库中打一个标签,这样就唯一确定了打标签时刻的版本。无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是一个快照。

创建标签

  • git checkout master
  • git tag v1.0
  • git tag v0.9 f52c633
  • git tag -a v0.1 -m ‘version 0.1 relase’ 1094abd
  • git tag 查看所有标签

操作标签

  • git tag -d v0.1 删除标签
  • git push origin v1.0 推送标签
  • git push origin - - tags 推送所有标签
  • 删除远程标签 git tag -d v0.9 /git push origin :refs/tags/v0.9