Git一些进阶的使用方法

最近在使用Git的时候一脸懵逼,之前只是使用一些最常用的命令

# 下面这两个代码使用的时候一定要保持仓库一致,执行push之前最好先pull一下,执行pull之前,要是比较自信就先提交一下,没有自信,就使用
git stash 
# 将当前的修改先放到栈里面,然后git pull, 然后再git stash pop 将修改应用到最新的仓库。如果有多个stash的栈,那就
git stash list
#看一下自己要回复哪以此stash的修改,使用
git stash pop @{number}
#就可以恢复对应的修改了
#拉取远程的仓库分支下的代码
git pull <远程仓库名> <远程仓库分支名>:<本地分支名>
#将本地分支代码推送到远程分支
git push <远程仓库名> <本地分支名>:<远程仓库分支名>

上面算是自己回忆一些基本的git使用命令,然后目前遇到了两种比较高阶的使用情况,以后想来会遇到更多这种情况,那就一个一个记录一下,免得以后忘记了。

  1. submodule
    这是一个模块化方法,比如我们在构建代码的时候可能会将一些别人完整的包放在自己的代码里面,如果直接放在一起显然是可以的,但是一个是保存起来有些占空间,还有就是不太方便管理,再者,要是你使用的包更新了,你想用更新后的包,那就要自己到包里面手动更新一下,或者删除本地旧包,clone新包。其实还有一种比较简单的方法就是使用submodule来管理这些包。具体使用如下:
# 下面从两个方向生成submodule
# 先从最开始搭建一个仓库开始吧,首先跳到自己创建的文件夹,比如要存放文件夹是Test_Project
# 使用 
git init
# 创建仓库,然后你就可以从远程拉过来你的代码了,不过除了使用
git clone <仓库 url>
# 还可以使用
git clone <SSH对应的URL>
# 还可以
git remote add <自己取个远程仓库的名字> <远程仓库的 SSH对应的URL>
git pull <自己取个远程仓库的名字> <远程仓库分支名>:<本地分支名>
# 这样远程仓库拉下来了,(这里假使你的仓库里面还没有包含别人的库),使用
git submodule add <别人仓库的URL或者SSH URL> <别人的仓库在本地存放的文件夹>
# 这里注意: <别人的仓库在本地存放的文件夹> 不需要手动创建,执行命令以后会自己创建的
# 特别注意: 上面拉去的是别人的master仓库,也就是主分支,可能并不是自己需要的分支。加入你想要submodule的不是别人的主分支
# 而是一个子分支,可以使用下面两种方式切换到子分支。第一种,跳转到<别人的仓库在本地存放的文件夹>,不需要使用 git init初始化仓库
# 直接执行如下命令:
git checkout <你想使用的远程仓库的分支名字——别人的仓库>
# 要是不想去到网页查看别人的仓库名字,可以使用:
git branch -r
#查看远程仓库名字,然后切过去就行了, 然后是第二种方式,在拉取别人仓库的时候直接指到分支上去,使用如下命令:
git submodule -b <你想使用的远程仓库的分支名字——别人的仓库> <别人仓库的URL或者SSH URL> <别人的仓库在本地存放的文件夹>
# 上面是你还没有在自己的仓库中放别人的库,还有一种情况,我当前是一个已经成型的项目,各种module都弄好了,我现在想让一些仓库submodule化
# 怎么办?其实可以直接使用:
git submodule add <别人仓库的URL或者SSH URL> <别人的仓库在本地存放的文件夹>
# 这样的话你的仓库直接变成了submodule,然后你跳转到这个submodule所在的文件夹,使用
git push origin <别人仓库下面的分支,你也可以自己创建一个分支推到这个新分支中>

上面就是两种submodule的方法,这时候你就创建好了submodule, 然后你需要把项目提交到远程仓库:
在使用完

git add 
git commit -m ""

提交到本地仓库后,记住如果submodule所在的仓库也有修改,你需要跳到里面使用上面的方式提交到本地,然后如果想要更新到远程仓库,也要对应的使用git push推上去. 这里主仓库推到远程以后是submodule显真章之处,也就是主仓库会有submodule的的文件夹,以及submodule对应的远程仓库的id, 但是文件夹里面是没有submodule中的内容的。这样就节省了仓库空间。那么当你有一天要使用这个代码库怎么办呢?那就使用以下命令:

# 正常的拉取主仓库,这里不再赘述,然后初始化submodule
git submodule init
# 更新submodule
git submodule update

执行完成上面的命令后记得到你的submodule中检查下,是不是拉取的你想要的远程仓库分支,不是的话就checkout过去就行了。
submodule就说到这儿,不正确的地方以后自己再来修改和补充。

  1. git checkout
    其实上面用到了好几次checkout来切换分支,但是最近使用时候遇到一种情况,先来描述一下遇到的问题。我当前已将远程仓库clone到本地,但是由于同事执行了一个merge操作,把我clone的远程仓库分支merge掉了,也就是我目前的本地仓库已经没有对应的远程仓库分支了。但是这时候我总不能抛弃当前代码,去拉取同事merge后的分支,怎么办呢?
    说说我一开始使用的方案:
    我首先:
git stash

把当前的修改先放到栈里面,当然也可以使用add| commit指令,但是与远程仓库不同的地方可能会被merge掉,stash会保险一些保存自己的修改。然后使用:

git fetch origin <merge后的仓库>
#然后,本地执行
git checkout <merge后的仓库>
# 然后,恢复自己的修改
git stash pop
# 然后手动merge一些不同之处就可以了

但是这时候偏偏遇到了这样的问题,就是在第一步fetch的时候,虽然执行完了fetch,出现了下面的结果:
在这里插入图片描述
但是使用git checkout 切换时出现下面的错误:
在这里插入图片描述
也就是并没有fetch新的分支成功,使用git branch -r发现远程分支还是老的信息,并没有更新新的远程分支。
怎么办?当然有办法,就是执行下面的指令:

git fetch --all --prune

–all将获取所有分支和标签
–prune将删除所有已删除的分支和标签
这些标志将应用于本地存储库。再使用git branch -r就可以看到新的远程分支了,然后执行后面的操作即可。
3. rebase
这个也很重要。。。改天搞懂了再写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值