实习期间,公司都用Git来管理代码
这里总结下:
Git
1. 结构图
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓
2. 基本命令
# 基本操作
git init # 初始化
git add filename # 把文件添加到暂存区
git rm filename # 删除文件
git commit -m "提交说明" # 提交暂存区的所有修改到本地仓库
git status # 查看git库的状态
git diff filename # 如果文件修改了,还没有提交,可以比较文件修改前后的差异
# 版本回退
git reset --hard HEAD^ # 回退到上一个版本
git reset --hard d7b5 # 回退到指定的版本(d7b5是想回退的指定版本号的前几位)
# 查看命令历史
git relog # 查看仓库的操作历史
# git分支管理
git branch # 查看分支
git branch 分支名 # 创建分支
git checkout 分支名 # 切换到指定分支
git checkout -b 分支名 # 创建分支并切换到创建的分支
git merge 分支名 # 合并某分支的内容到当前分支
git branch -d 分支名 # 删除分支
# git标签
git tag 标签名 版本号 # 新建标签
git tag # 查看所有的标签
git show 标签名 # 查看标签的详细信息
git push origin --tags # 推送所有的tag
git push origin v1.0 # 推送某个tag
# git远端库相关
git remote add origin git://127.0.0.1/abc.git # 添加远程仓库abc
git remote remove origin # 移除远端仓库
git push -u origin master # 将本地仓库内容推送到远端仓库(-u 表示第一次推送,后面再推送就不需要-u了)
git pull # 从远端库更新内容到本地
3. 补充
1. git merge 和 git rebase 的区别
- git rebase会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。
- 如果你从 master 拉了个feature分支出来,然后你提交了几个 commit,
- 这个时候刚好有人把他开发的东西合并到 master 了,
- 这个时候 master 就比你拉分支的时候多了几个 commit,
- 如果这个时候你 rebase master 的话,就会把你当前的几个 commit,放到那个人 commit 的后面。
- merge 会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交
举个例子:
1-2-3 是现在的分支状态
这个时候从原来的master ,checkout出来一个prod分支
然后master提交了4.5,prod提交了6.7
这个时候master分支状态就是1-2-3-4-5,prod状态变成1-2-3-6-7
如果在prod上用rebase master ,prod分支状态就成了1-2-3-4-5-6-7
如果是merge
1-2-3-6-7-8
........ |4-5|
会出来一个8,这个8的提交就是把4-5合进来的提交
2. git pull 和 git fetch
git pull = git fetch + git merge
- 我们本地的git文件夹里面对应也存储了git本地仓库master分支的commit ID 和 跟踪的远程分支master的commit ID
- 使用git fetch更新代码,本地的库中master的commitID不变,还是等于1。但是远程分支master的commit ID变成了2,这时候我们本地相当于存储了两个代码的版本号,还要通过merge去合并这两个不同的代码版本
相当于fetch的时候本地的master没有变化,但是与远程仓关联的那个版本号被更新了,我们接下来就是在本地合并这两个版本号的代码。
- 使用git pull的会将本地的代码更新至远程仓库里面最新的代码版本