三分钟学会git命令

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/wangxueming/article/details/81054694

用了git将近一年,总结一下能确保没问题的一些场景。特意简化了一些操作。减少了一些指令。最近9个月git管理没有碰到问题
###场景一:ssh配置
参考github文章
github关于ssh生成添加
一般来说,公司内部的github也是有相关的文章的。
需要注意一下几点
ssh生成指令:ssh-keygen -t rsa -C "[email protected]" -b 4096
生成的.ssh在用户文件夹内
ssh公钥获取:cat ~/.ssh/id_rsa.pub

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

###场景二:拉取代码

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上啃次啃次的改。

###场景五:拉取子模块

  • 首先要做的是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 push的时候啦,或者说有 提交 动作的时候

#####怎么解决呢

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

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

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

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

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

接着继续push

git push

###场景八:代码落后最新的commit
这个可以用的比较多。我喜欢用比较强悍的方式。

  • 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命令


###场景十:添加子模块

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

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

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

基本上就可以解决问题,记得push到远程仓库。
有多级嵌套工程的时候就会可能出现。留个心眼儿
###场景十一:删除子模块
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'

猜你喜欢

转载自blog.csdn.net/wangxueming/article/details/81054694