Git命令详解

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(本地库)

推送原则:

  1. master是主分支,因此时刻要与远程同步
  2. dev 分支为开发分支,团队所有人均在上面工作,因此也需要时刻同步
  3. bug分支只用于本地修复bug,没必要推到远程
  4. feature分支是否推送,取决于是否和其他人共同开发

抓取分支:多人协作时,大家往往都会向master和dev分支上推送各自的修改

多人协作工作模式

  1. 其他人从远程库复制代码

     git clone https://github.com/whatmini/day1.git
    
  2. 小伙伴子啊本地的dev分支上开发,须创建远程的origin的dev分支到本地

     git checkout -b dev origin/dev
    
  3. 小伙伴用下面的命令把dev分支push远程

     git push origin branch -name 
    
  4. 若推送失败,说明其他人对同样的文件作了修改,这里通过git pull将最新的提交从origin/dev上抓下来在本地合并,解决冲突再推送(若失败(显示"no tracking in formation"),需设置dev和origin/dev分支的链接)

  5. 再次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 分支名称              将指定分支合并到当前分支
原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/7553924.html