Git命令
Git是一个免费和开源的分布式版本控制系统,它的设计是为了处理从小到大的项目,包括速度和效率。Git很容易学习,而且具有闪电般的快速性能。它超越了像Subversion、CVS、Perforce和ClearCase这样的配置管理工具,具有廉价的本地分支、方便的登台区域和多个工作流。
创建git版本命令流程
1.git init 将当前的目录变成git可以管理的仓库
2.git config user name "whatmini" 设定用户名称
3.git config user.email "lijianszglad@163.com" 设置电子邮箱
4.git add * 添加文件到暂存区
5.git commit -m "some init msg" 提交文件到当前的分支
以上为创建git版本库流程,git可以多次add文件,一次commit
查看当前状态
1. git status 掌握仓库的当前状态
2. git diff * 检查上一次对文件做的修改
版本的回退
1. git log 查看版本库的修改记录
2. git log --pretty=oneline 用commit id(版本号)显示修改记录
3. git reset --hard HEAD^ 代表回退到上一版本(HEAD^^为上上版)
4. git reset --hard 12323 回退到版本号为12323的版本
5. git reflog 用来记录每一次命令(查询某次修改的版本号)
如图所示:
通过add将文件由工作区→暂存区
commit将文件由暂存区→分支(git自动创建了叫master的分支)
HEAD为一个指针指向当前的版本
git status 为查看暂存区是否清空
需要知道的是Git跟踪管理的是修改,而不是文件
撤销修改
场景A
git checkout -- *的两种情况:
1.* 文件修改后还未放到缓存区,撤销修改就回到和版本库相同
2.* 文件已添加到暂存区,又作了修改,撤销修改就到暂存区的状态
场景B
1.先 git reset HEAD * 把暂存区的修改撤销掉,重回工作区
2.后 git checkout --* 丢弃工作区的修改
以上先后两步为将文件add到暂存区,而没有commit时的撤销修改
场景C
若已经将文件从暂存区commit到版本库,采用版本回退到上一个版本前提是没有将本地版本库推送到远程,若已推送远程,则无法撤销
删除
git rm * 用于删除一个文件
1.误删,使用git checkout --*恢复
2.确实要删除,使用git rm * 将其从git版本库中删除
(git checkout -- *为用版本库版本替换工作区版本,无论修改还是删除)
添加远程程序
git pash origin master 将本地master最新修改推至GitHub
关联一个新的远程程序:
git remote add origin https://github.com/whatmini/day1.git
第一次推送master分支的所有内容:
git push -u origin master
远程克隆
Git 支持多种协议,包括http,但通过ssh支持的原生git协议速度最快
git clone克隆一个本地库
git clone https://github.com/whatmini/day1.git
分支管理
Git鼓励你使用分支完成某个任务,合并后再删除分支,这和直接在master分支上工作效果一样但过程更安全
创建与合并分支
默认的master分支:
Git用master指向最新的提交,再用HEAD指向master(HEAD指向当前分支)
创建型的分支
MacBook-Pro-4:pondo wupeiqi$ git branch dev # 创建新分支,即:拷贝一份当前所在分支代码到新分支
MacBook-Pro-4:pondo whatmini$ git checkout dev # 切换到dev分支
MacBook-Pro-4:pondo whatmini$ vim app01/views.py # 开发功能
MacBook-Pro-4:pondo whatmini$ git status # 查看状态,即:在dev分支修改了app01/views.py文件
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: app01/views.py
no changes added to commit (use "git add" and/or "git commit -a")
MacBook-Pro-4:pondo whatmini$ git add . # 将修改文件添加到版本库的暂存区
MacBook-Pro-4:pondo whatmini$ git commit -m '新功能开发完毕' # 将暂存区的内容提交到当前所在分支,即:dev分支
[dev 32b40cd] 新功能开发完毕
file changed, 2 insertions(+)
MacBook-Pro-4:pondo whatmini$ git checkout master # 切换回master分支
Switched to branch 'master'
MacBook-Pro-4:pondo whatmini$ git merge dev # 将dev分支内容合并到master分支
Updating 0972f4b..32b40cd
Fast-forward
app01/views.py | 2 ++
file changed, 2 insertions(+)
一般流程示例(上图)
这里需要了解的是合并完成后,需要删除dev分支,删除dev分支就是删除dev指针
分支解决Bug
MacBook-Pro-4:pondo whatmini$ git branch # 当前在master分支
* master
MacBook-Pro-4:pondo whatmini$ git branch dev # 创建dev分支用于开发新功能
MacBook-Pro-4:pondo whatmini$ git checkout dev # 切换到dev分支
Switched to branch 'dev'
MacBook-Pro-4:pondo whatmini$ vim app01/views.py # 开发新功能到一半,需要紧急修复Bug
MacBook-Pro-4:pondo whatmini$ git add .
MacBook-Pro-4:pondo whatmini$ git commit -m '新功能开发一半'
[dev b3ac2cb] 新功能开发一半
1 file changed, 2 insertions(+)
MacBook-Pro-4:pondo whatmini$ git checkout master # 切换回master分支
Switched to branch 'master'
MacBook-Pro-4:pondo whatmini$ git branch bug # 创建bug分支
MacBook-Pro-4:pondo whatmini$ git checkout bug # 切换到bug分支
Switched to branch 'bug'
MacBook-Pro-4:pondo whatmini$ vim pondo/settings.py # 修改bug
MacBook-Pro-4:pondo whatmini$ git add . # 提交bug
MacBook-Pro-4:pondo whatmini$ git commit -m '紧急修复bug' # 提交bug
[bug f42f386] 紧急修复bug
1 file changed, 1 insertion(+), 1 deletion(-)
MacBook-Pro-4:pondo whatmini$ git checkout master # 切换会master
Switched to branch 'master'
MacBook-Pro-4:pondo whatmini$ git merge bug # 将bug分支内容合并到master分支,表示bug修复完毕,可以上线
Updating 0972f4b..f42f386
Fast-forward
pondo/settings.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
MacBook-Pro-4:pondo whatmini$ git checkout dev # 切换到dev分支,继续开发新功能
Switched to branch 'dev'
MacBook-Pro-4:pondo whatmini$ vim app01/views.py # 继续开发其他一半功能
MacBook-Pro-4:pondo whatmini$ git add . # 提交新功能
MacBook-Pro-4:pondo whatmini$ git commit -m '继续开发完成' # 提交功能
[dev c0bfb27] 继续开发完成
1 file changed, 1 insertion(+)
MacBook-Pro-4:pondo whatmini$ git checkout master # 切换回master分支
Switched to branch 'master'
MacBook-Pro-4:pondo whatmini$ git merge dev # 将dev分支合并到master分支
Merge made by the 'recursive' strategy.
app01/views.py | 3 +++
1 file changed, 3 insertions(+)
Feature分支
开发一个新的feature(功能),最好新建一个分支,如果要丢弃一个没有被合并过的分支,可通过git branch -D
多人协作
git remote -v 显示可以抓取和推送的地址,如果没有推送权限就看不到push的地址
推送分支:git push origin(远程序) master(本地库)
推送原则:
- master是主分支,因此时刻要与远程同步
- dev 分支为开发分支,团队所有人均在上面工作,因此也需要时刻同步
- bug分支只用于本地修复bug,没必要推到远程
- feature分支是否推送,取决于是否和其他人共同开发
抓取分支:多人协作时,大家往往都会向master和dev分支上推送各自的修改
多人协作工作模式
-
其他人从远程库复制代码
git clone https://github.com/whatmini/day1.git
-
小伙伴子啊本地的dev分支上开发,须创建远程的origin的dev分支到本地
git checkout -b dev origin/dev
-
小伙伴用下面的命令把dev分支push远程
git push origin branch -name
-
若推送失败,说明其他人对同样的文件作了修改,这里通过git pull将最新的提交从origin/dev上抓下来在本地合并,解决冲突再推送(若失败(显示"no tracking in formation"),需设置dev和origin/dev分支的链接)
-
再次pull,git pull成功,但合并有冲突同解决冲突并在本地提交
创建标签
1. git tag <name> 用于创建新标签默认为新标签
2. git tag <name> <commit id> 对指定的commit id 建立新标签
3. git log --pretty=oneline --abbrev -commit 获取历史commit id 列表
4. git tag -a <tagname> -m "..." 指定标签信息
5. git tag 可以查看所有标签
6. git <tag name> 查看标签信息
操作标签
1. git tag -d <tagname> 删除本地标签
2. git push origin <tagname> 推送一个本地标签
3. git push origin --tags 推送全部未推送的本地标签
4. git push origin:refs|tags|<tagname> 删除一个远程标签
branch相关常用命令:
git branch 分支名称 创建分支
git checkout 分支名称 切换分支
git branch -m 分支名称 创建并切换到指定分支
git branch 查看所有分支
git branch -d 分支名称 删除分支
git merge 分支名称 将指定分支合并到当前分支