为了更方便的使用git,准备了一些git命令使用场景,不断更新。
这些命令基本满足日常使用。
参考github文章
github关于ssh生成添加
一般来说,公司内部的github也是有相关的文章的。
需要注意一下几点
ssh生成指令:ssh-keygen -t rsa -C "[email protected]" -b 4096
生成的.ssh在用户文件夹内
ssh公钥获取:cat ~/.ssh/id_rsa.pub
不要输入什么密码,无密码最方便
,中间操作不会提示输入密码(配置都不用了)你的email跟你登陆github的email 一致
。有权限拉不了的问题不会出现。git clone git://example.com/myproject
区别:
git branch
git branch -a
git fetch
创建分支(这个分支是本地分支)
git checkout -b 新分支名
切换分支
git checkout 分支名
git checkout origin 分支名
若你要切换本地仓库没有,远程仓库有的分支怎么办,
这里要输入origin 分支名, 请结合git branch -a一起看
----注意----
真的真的真的需要
你常用这个命令
版本管理
在日常工作中很重要
,切记每次修改新需求,或者做新功能,都拉一个分支出来。别直接在develop上啃次啃次的改。
git submodule init
怎么理解呢,从字面上看,就是初始化子模块。但为什么要先初始化呢?为什么不拉了就完了呢。
这是因为git要先开辟一个目录 存放子模块的代码
,
这个跟初始化一个工程是一样的
,需要先git init 项目名
git submodule update
这里就会根据git submodule init出来的项目来拉取相应的代码
注意的点:
你已执行过,又没新增submodule会没有什么提示的信息
若用什么ide打开后,可能会自动创建相应的文件夹
,提示错误,没关系,删除掉就可以继续
通过git submodule add进来
,git管理也是独立的
,绝非通过直接引入的那种
。所以主工程的代码无法影响子模块的git
,需要单独提交
多检查一下当前的分支
,是不会坑的git status
相信我这个命令多打打,多看看,会减少很多错误提交的代码,这里面有我的一把辛酸泪
git add 文件/文件夹名
多看git status,执行add后,也可以打打git status,查看下差异,就知道git add的执行效果
git commit -m "message"
这个好理解,将修改的合并成commit,这是已经提交代码到本地仓
,但未同步到远程仓
git push
如果提示失败怎么办,一般就是。看下提示信息吧
git push origin 分支名
这里分支名就是你当前的分支名了
发生这个情况,一般就是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
这个可以用的比较多。我喜欢用比较强悍的方式。
git log
你要知道你当前修改的所有commit记录,把这些东西都记录下来,放在记事本上,等下要用
git reset --hard 某个之前的commit
直接将版本回退到肯定纳入到远程仓库的commit
上。这是为了保证下一步拉取代码到最新不会出现冲突
git pull
就是将代码拉到最新
git cherry-pick 你之前记在记事本里头的commit
注意: 一定要按照你的commit提交顺序一个一个提交
为什么不直接说多个提交呢。怕不熟悉的时候出问题。
其实git cherry-pick 是支持提交多个commit的
git cherry-pick commit_start...commit_end
可以参考git提交commit区间
场景七
解决, 然后push提交到远程git push
不要害怕git reset,要用这个reset,一定要确认好现在的代码是不是你要的。 全部确认好!!!
git reset --soft commit的id
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
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
描述:本地新建了一个工程,进行代码编写后,希望关联到远程仓库。
前置条件:命令行,先切到 工程所在目录
git init
git add .
git commit -m "a.txt"
git remote add origin [email protected]:wangxueming/RockyWeather2.git
git push --set-upstream origin master
描述:git clone 了一份代码,希望能迁移到自己仓库去。
git remote -v
git remote set-url origin [email protected]:wangxueming/MyProject.git
git remote -v
git push -u origin master
fatal: destination path ‘.’ already exists and is not an empty directory.
解决的办法是:
git clone [email protected]:wangxueming/ShopService.git tmp
接下来,你就可以上传代码到 远程仓库了