三分钟学会git命令

在这里插入图片描述

前言

为了更方便的使用git,准备了一些git命令使用场景,不断更新。
这些命令基本满足日常使用。

目录如下
  • 起步:ssh配置
  • clone代码
  • 查看你所在的分支
  • 创建/切换分支
  • 同步submodule子模块代码
  • 提交代码
  • git代码冲突解决
  • 代码更新到latest
  • commit回退/代码回退
  • 添加submodule子模块
  • 删除submodule子模块
  • 清除缓存及重置gitignore
  • 关联远程仓库

场景一:ssh配置

参考github文章
github关于ssh生成添加
一般来说,公司内部的github也是有相关的文章的。
需要注意一下几点
ssh生成指令:ssh-keygen -t rsa -C "your.email@example.com" -b 4096
生成的.ssh在用户文件夹内
ssh公钥获取:cat ~/.ssh/id_rsa.pub

  1. 执行ssh生成指令时,不要输入什么密码,无密码最方便,中间操作不会提示输入密码(配置都不用了)
  2. 你的email跟你登陆github的email 一致。有权限拉不了的问题不会出现。

场景二:clone代码

git clone git://example.com/myproject

区别:

  1. 拉前缀为git://,不需要输入密码
  2. 拉前缀为http://,可能会需要你输入密码

场景三:查看你所在的分支

  • 查询当前所在的分支
git branch
  • 查询当前所有的分支
git branch -a
  • 若还是不存在你要的分支
git fetch

该指令将同步服务器的分支列表,同步后再次查看就会有你没同步到的分支

场景四:创建/切换分支

创建分支(这个分支是本地分支)

git checkout -b 新分支名

切换分支

git checkout 分支名
  • 若提示失败,检查名字是否正确,名字正确输入指令
git checkout origin 分支名

若你要切换本地仓库没有,远程仓库有的分支怎么办,
这里要输入origin 分支名, 请结合git branch -a一起看

----注意----
真的真的真的需要你常用这个命令
版本管理在日常工作中很重要,切记每次修改新需求,或者做新功能,都拉一个分支出来。别直接在develop上啃次啃次的改。


场景五:同步submodule子模块代码

  • 首先要做的是initialize子模块
git submodule init

怎么理解呢,从字面上看,就是初始化子模块。但为什么要先初始化呢?为什么不拉了就完了呢。
这是因为git要先开辟一个目录 存放子模块的代码
这个跟初始化一个工程是一样的,需要先git init 项目名

  • 其次拉取子模块代码
git submodule update

这里就会根据git submodule init出来的项目来拉取相应的代码
注意的点:

  1. git submodule init若你已执行过,又没新增submodule会没有什么提示的信息
  2. git submodule update你若用什么ide打开后,可能会自动创建相应的文件夹,提示错误,没关系,删除掉就可以继续
  3. 这里说的子模块子模块是通过git submodule add进来,git管理也是独立的绝非通过直接引入的那种。所以主工程的代码无法影响子模块的git,需要单独提交
  4. 子模块的分支也是独立的,多检查一下当前的分支,是不会坑的

场景六:提交代码

  • step1:查看修改的文件
git status

相信我这个命令多打打,多看看,会减少很多错误提交的代码,这里面有我的一把辛酸泪

  • step2:确认需要提交修改的文件
git add 文件/文件夹名

多看git status,执行add后,也可以打打git status,查看下差异,就知道git add的执行效果

  • step3:合成并commit
git commit -m "message"

这个好理解,将修改的合并成commit,这是已经提交代码到本地仓,但未同步到远程仓

  • step4:提交到远程仓库
git push

如果提示失败怎么办,一般就是。看下提示信息吧

git push origin 分支名

这里分支名就是你当前的分支名了


场景七:git代码冲突解决

发生这个情况,一般就是git push的时候啦,或者说有 提交 动作的时候

#####怎么解决呢

  • 查看git push时给的提示信息,如果没看到。用git status查看下。红色的都是你要处理的
  • 这个时候,请打开提示冲突的文件
<<<<<<< HEAD
你写的代码部分
=======
别人的代码部分
>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc

为什么这里给了这么个范例,我们学会看这个东西。
一、=====是分割线
二、<<<<< HEAD是我们现在的
三、>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc 是其他人的

为什么这里写的词是HEAD?
这是因为git的history就像一个队列commit就是其中的每一个节点
HEAD就是游走在commit间的指针,指到哪个,当前就是哪个

为什么>>>>后面也有信息?
因为冲突需要告诉你,是哪个commit改的

  • 解决完成后,怎么操作?
git add 冲突的文件

接着继续push

git commit -m "xxxxx"  //#可以加一个commit,记录下冲突的情况
git push

场景八:代码更新到latest

这个可以用的比较多。我喜欢用比较强悍的方式。

  • step1:查找当前的commit history
git log

你要知道你当前修改的所有commit记录,把这些东西都记录下来,放在记事本上,等下要用

  • step2:回到某个history上的版本
git reset --hard 某个之前的commit

直接将版本回退到肯定纳入到远程仓库的commit上。这是为了保证下一步拉取代码到最新不会出现冲突

  • step3:拉取代码到最新
git pull
    就是将代码拉到最新
  • step4:提交你的commit到最新的版本上
git cherry-pick 你之前记在记事本里头的commit

注意: 一定要按照你的commit提交顺序一个一个提交
为什么不直接说多个提交呢。怕不熟悉的时候出问题。
其实git cherry-pick 是支持提交多个commit的
git cherry-pick commit_start...commit_end
可以参考git提交commit区间

  • step5:遇到冲突,按照场景七解决, 然后push提交到远程
git push

场景九:commit回退/代码回退

不要害怕git reset,要用这个reset,一定要确认好现在的代码是不是你要的。 全部确认好!!!

  • 回退commit保留代码
    git reset --soft commit的id
    
  • 回退commit不保留代码
    git reset --hard commit的id
    
    这里的commit的id是从git log中查到的。

以上就是一般工作常用的git命令


场景十:添加submodule子模块

git submodule add -b 分支名 git链接地址 你需要到处的文件夹名

注意:
假如有一天,你发现你无法拉取子模块代码了。
git submodule init也看不到子模块了。但似乎.gitmodules也是正常的。
不要慌,再执行一次

git submodule add -b 分支名 git链接地址 你需要到处的文件夹名

基本上就可以解决问题,记得push到远程仓库。
有多级嵌套工程的时候就会可能出现。留个心眼儿


场景十一:删除submodule子模块

step 0. mv a/submodule a/submodule_tmp

step 1. git submodule deinit -f – a/submodule
step 2. rm -rf .git/modules/a/submodule
step 3. git rm -f a/submodule
Note: a/submodule (no trailing slash)

or, if you want to leave it in your working tree and have done step 0
3. git rm --cached a/submodule
3bis mv a/submodule_tmp a/submodule


场景十一:清除缓存重置gitignore

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

场景十二:关联远程仓库

描述:本地新建了一个工程,进行代码编写后,希望关联到远程仓库。

这需要做几个操作

前置条件:命令行,先切到 工程所在目录

  • 1.本地工程代码 初始化git目录
    git init
    
  • 2.ga添加代码到暂存区,生成一个commit
    git add .
    
    git commit -m "a.txt"
    
  • 3.关联远程仓库
    git remote add origin git@github.com:wangxueming/RockyWeather2.git
    
  • 4.关联分支,这里是master分支,并同步到远程仓库
    git push --set-upstream origin master
    

场景十三:仓库迁移

描述:git clone 了一份代码,希望能迁移到自己仓库去。

这需要做几个操作
  • 1.查看下当前的remote
git remote -v
  • 2.重新设置remote url
git remote set-url origin git@gitee.com:wangxueming/MyProject.git
  • 3.再查看下当前的remote,看生效没有
git remote -v
  • 4.推送到远程仓库
git push -u origin master

场景十四:上传本地项目到 非空 远程仓库

fatal: destination path ‘.’ already exists and is not an empty directory.

解决的办法是:

  1. git clone到临时文件
    git clone git@gitee.com:wangxueming/ShopService.git tmp
    
  2. mv tmp/.git 你的目标目录 #将 tmp 目录下的 .git 目录移到目标目录
  3. cd 到你的目标项目文件夹中
  4. git reset --hard HEAD

接下来,你就可以上传代码到 远程仓库了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值