【工具】---- git 的命令

一、git常用命令

0, 回退版本

> git reset --soft key  		soft回滚后本地会保留修改的记录
> git reset –hard key      		hard回滚后不会保留记录,直接回到变更后的代码版本
git push origin 分支 –force     该命令提交,log记录就被删除了

1,分支命令

> git branch    		查看本地分支 
> git branch –a 		查看当前所有分支(包括远端分支)
> git branch xxx   	    创建子分支
> git checkout xxx 	    切换分支
> git checkout –b xxx   创建并切换到新的分支 
> git branch -d xxx	    删除分支
> git branch -D xxx	    强制删除分支

2,克隆命令

> git clone 仓库名      		克隆远端仓库 
> git clone --recursive 仓库名  用于循环克隆git子项目.如果Git仓库中含有子     项目,此命令可将子项目一起克隆下来的. 

3,add 命令

> git add -u  				将新更改的部分添加到本地
> git add .				    添加全部改动的文件 
> git add test/xxx.c 	    添加 test 目录下的 xxx.c 文件 

4,log 命令

 > git log 						查看提交日志
 > git log 	--oneline           查看提交日志,显示短的ID,并与提交描述显示在同一行
 > git log --oneline --graph     树形结构查看短描述和校验值

5,其他命令

> git init						初始化仓库
> git status 					查看当前状态
> git commit -m "日志信息" 		将文件提交到本地
> git diff 						查看修改信息
> git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

6,git rebase

> git rebase 目标分支     变基
> git rebase -i 分支ID    删除、合并、修改commit  (drop squash reword)
> git rebase (--continue | --abort | --skip)  (继续变基 | 取消变基 |  对齐引起冲突的commit,该命令慎用)

7,git reset

> git reset --hard 分支ID     版本回退
> git reset --soft HEAD~1     删除提交的commit但不删除add
> git reset --hard HEAD~1     删除提交的commit和add

8,合入其他分支某一次commit的修改

> git cherry-pick commitID

9,push和pull
push:用本地分支合并到远程分支
pull:将远程分支合并到本地分支

 > git pull origin master 		更新远端版本库到本地 
 > git push origin xxx     		将当前分支的提交推送到远端
 > git push origin <本地分支名>:<远程分支名>   推送到远端指定分支
 > git push origin --delete XX   删除远端分支  

二、更新远端仓库

1. 使用fetch

 > git remote -v				 查看远程仓库
 > git fetch origin master:temp  将远程origin仓库的master分支代码下载到本地新建的temp分支
 > git diff temp 				 比较本地仓库与下载的temp分支 
 > git merge temp  				 合并temp分支到本地的master分支
 > git branch -d temp  			 删除temp分支
   git branch -D temp 	         可强制删除temp分支。

2. 使用pull

 > git pull <远程库名A> <远程分支名B>:<本地分支名C> 
取回远程库A中的B分支,与本地的C分支进行merge。
要是与本地当前分支合并,则冒号后面的<本地分支名C>可以不写。

三、git 推送流程

1. 获取最新代码,合并到本地分支

(1)获取需要推送的远端分支上的修改:

 > git fetch -p    //获取被删减后的远程分支

(2)使用小乌龟合并,并解决冲突
(3)git commit -m 创建修改日志
(4)编译一下代码。如果不成功,运行rebase --abort 可取消合并。

2. 变基到远端分支

  1. 运行变基命令
git rebase origin/master

无冲突直接推送。不用看2-6操作
2. 有冲突就需要看提示发生冲突的文件,解决冲突
3. git status 查看改动的文件并git add ,但不commit
4. 继续变基git rebase continue
5. 循环2-4操作,直到当前分支后面没有|REBASE x/y,表示变基完成
6. 运行git log --graph 查看变基是否成功

3. 推送

本地的commit都要推送:编译检查后,直接git push origin 分支名。不用看下面操作。
只推送一个commit:

  1. git rebase -i ID 这个ID是前一个commit
    eg:
    我们只不需要”规范代码”到“完善I2C”这之间的commit。运行 git rebase -i 代码规范完成ID
    ID号
  2. 编辑
    将第一行的pick保存,其余全部改成s

pick 的意思是要执行这个 commit
squash 的意思是这个 commit 会被合并到前一个 commit
ESC:命令模式
shift+i:编辑模式
wq:保存退出
q!:不保存退出

  1. 解决冲突,推送

注:

git在本地会保存两个版本的仓库,分为本地仓库和远程仓库。

  • 本地仓库就是我们平时 add、commit 的那个仓库。
  • 远程仓库可以用git remote -v查看(这里的远程仓库是保存在本地的远程仓库,等同于另一个版本,不是远程的远程仓库)。

四、git 子仓库

1. Git仓库中包含另外的仓库(子仓库)

添加子仓库
git submodule add [子仓库地址]
删除子仓库
$ git submodule deinit module
$ git rm module
$ rm -rf .git/modules/module

2. clone 一个带有子仓库的仓库

  • 方式一
先克隆父仓库
$ git clone [父仓库地址]

查看子仓库,可以看到submodule信息前有个减号’-’

$ git submodule

初始化子仓库

$ git submodule init

克隆/更新子仓库

$ git submodule update

切换到子仓库的master分支,update 后的 submodule 会被 checkout 到 head 的 commit id 上,并不会自动checkout 到 master 分支

$ git submodule foreach git checkout master
  • 方式二
    直接父、子仓库一起克隆
$ git clone [父仓库地址] --recursive

查看子仓库,可以看到submodule信息前没有减号’-’

$ git submodule

切换到子仓库的master分支,update 后的 submodule 会被 checkout 到 head 的 commit id 上,并不会自动checkout 到 master 分支

$ git submodule foreach git checkout master

3. 如果 submodule 中还带有 submodule,那么可以是用 --recursive 参数

更新带有子仓库的仓库

  • 方式一
$ git pull
$ git submodule init
$ git submodule update
  • 方式二
$ git submodule foreach git pull origin master

提交子仓库
先在 子仓库下的目录下 push,这是单独更新 submodule 的内容
然后在父仓库的目录下push,这是更新父仓库的 submodule 信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值