现在版本控制使用git的挺多,之前常用SVN,偶尔使用Git也是使用可视化工具操作(sourcTree,IDE自带的Git功能),之前不求甚解,所以对git的了解相当浅薄,后来遇到问题只能一次一次去查资料,后来用的多了就觉得麻烦,所以整理一下git的相关命令行操作,以备后用!因为分值操作相关较多且稍复杂,统一放在文章后面
git最常用的基本命令
1.查看当前git版本(判断是否安装过git)
git --version
image.png
2.git下载代码
gitclonehttp://gitlab.tech.xxx.com/xxx/backend-view.git
image.png
项目地址在gitlab项目地址复制粘贴即可(全局配置权限后以后即可不用输入,不再赘述)
3.修改编辑项目常用
// 查看当前仓库文件状态(常在提交文件之前查看,会显示新增文件删除文件,已修改文件等状态)git status// 添加文件gitadd.// 添加所有已修改文件gitaddfileName// 添加指定文件名的文件(可在git status返回中复制)// 提交修改说明git commit-m"修改的内容"// 记录当前提交的主题 以便区分每次提交的内容// 拉取代码git pull// 拉取代码 push之前pull一次代码 (尤其多人开发一定注意push之前先pull)git pull origin<远程分支名>// 将远程指定分支 拉取到 本地当前分支上git pull origin<远程分支名>:<本地分支名>// 将远程指定分支 拉取到 本地指定分支上git pull origin// 将与本地当前分支同名的远程分支 拉取到 本地当前分支上(需先关联远程分支)// 推送代码git push// 推送代码到远程仓库git push origin<本地分支名>// 将本地当前分支 推送到 与本地当前分支同名的远程分支上(注意:pull是远程在前本地在后,push相反)git push origin<本地分支名>:<远程分支名>// 将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反)git push origin// 将本地当前分支 推送到 与本地当前分支同名的远程分支上(需先关联远程分支)git push--set-upstream origin// <本地分支名>将本地分支与远程同名分支相关联
4.分支相关
git branch// 查看本地分支(名称前面加* 号的是当前的分支)git branch-a// 查看分支,远程分支会用红色表示出来(如果你开了颜色支持的话)git branch-vv// 查看本地分支和远程分支对应关系git remote// 列出所有远程主机git remote update origin--prune// 更新远程主机origin(gitlab有新分支,本地查看分支无法查看到的时候使用)git branch-r// 列出远程分支git branch-vv// 查看本地分支和远程分支对应关系git checkout-b dev origin/dev// 新建本地分支dev与远程dev分支相关联
4.1 新建分支相关
git checkout-b newBranchgit push origin newBranch:newBranch// 把新建的本地分支push到远程服务器,远程分支与本地分支同名(当然可以随意起名):
4.2 删除分支相关
4.2.1 删除本地分支
git branch-D newBranch// 删除本地 newBranch 分支git checkout newBranch// 如果需要重新拉取远程的newBranch分支 执行
4.2.2 删除远程分支
git push origin:delBranchNamegit push origin--deletedelBranchName
// 切换分支,分支跟踪, 本地分支和远程分支的关系git branch branchName// 创建分支git checkout branchName// 切换分支git branch-d branchName// 删除本地分支git branch-r-d origin/branch-name git push origin:branch-name// 删除远程分支// 如果远程新建了一个分支,本地没有该分支,git checkout --track origin/ branchName ,这时本地会新建一个分支名叫 branchName,会自动跟踪远程的同名分支 branchName。git checkout--track origin/branchName// 如果本地新建了一个分支 branchName,但是在远程没有。这时候 push 和 pull 指令就无法确定该跟踪谁,一般来说我们都会使其跟踪远程同名分支,所以可以利用 git push --set-upstream origin branchName ,这样就可以自动在远程创建一个 branchName 分支,然后本地分支会 track 该分支。后面再对该分支使用 push 和 pull 就自动同步。git push--set-upstream origin branchName// 合并分支(多人开发中,经常一人一个分支,各自在自己分支开发,开发完成以后合并到某一个指定分支,没有问题后最后合并到master主分支,我们的流程是各自在自己的develop开发,开发完成以后合并到lastest分支,没有问题后提交合并申请到master分支,由leader审批是否统一合并到master,因为很多新人不太清楚代码的具体用途,所以讲的稍微详细点,明白命令的实现目的能更好的掌握使用,后面会有具体的操作流程)1.本地代码依次git statusgitaddgit commit-m""git pullgit push (develop-author分支,即自己的开发分支)以后(把本地代码推送到远程对应分支)2.git checkout lastest (切换到lastest分支)3.git pull origin lastest (先把远程lastest分支修改内容拉取,多人开发,需要把远程lastest上的代码pull下来)4.git merge develop-author (合并自己的分支到lastest)
image.png
image.png
image.png
image.png
5 git stash相关(临时保存当前工作区修改)
其实这个我并不经常用,所以理解可能不足,粗略讲下自己的想法, git stash 常用于 多人开发项目,例如:正式环境代码在master,自己开发在dev,当你正在dev开发或修改时,正式环境有个紧急问题需要解决,但是你dev分支的修改只进行了一半,不方便提交时可以利用git stash 将工作区修改过的内容临时保存起来,切换回master修改完紧急内容会回来可以再取出来临时保存的修改继续操作(还是不太理解的话,再举个不是很恰当的例子,比如你有一些文件在特定环境下必须通过U盘拷到另一个电脑上,只是举个例子,别说说用qq蓝牙邮件什么的传输,但是U盘储存空间不足以保存需要传输的内容大小,也不能分批次传输,这种情况相信大家都能想到先把U盘已有的内容剪切到电脑上,腾出空间储存需要拷贝的资料,等拷贝到目标电脑以后再把U盘原有文件恢复到U盘即可,这个过程就相当于 git stash最基本的用途)。说了这么多,看重点吧
(1)git stash save"save message":执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。(2)git stash list :查看stash了哪些存储(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}(4)git stash show-p:显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num}-p ,比如第二个:git stash show stash@{1}-p(5)git stash apply:应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num}, 比如第二个:git stash apply stash@{1}(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num},比如应用并删除第二个:git stash pop stash@{1}(7)git stash drop stash@{$num}:丢弃stash@{$num}存储,从列表中删除这个存储(8)git stash clear :删除所有缓存的stash有时也可通过这种方法实现避免或解决冲突,当你修改的内容是最新的,但是你需要pull下来的代码是需要被替换的,你pull的时候还是会冲突,可以先把你的修改stash临时保存,pull完代码以后在恢复stash的保存,即可替换pull下来的需要被替换的代码,当然不保存直接对比解决冲突也是可以的,看个人喜好了。其他更好的用途相信在遇到更多问题的时候会慢慢发掘出来
暂时想到的常用的基本就这些了,关于多人开发冲突解决的有时候自己提交的时候 pull或push失败 可以查看git status 是否多出了一些绿色的文件名称,检查文件没有 ====的冲突提示以及修复冲突以后重新提交即可
<<<<<<<HEADCreatinganewbranchisquick&simple.=======CreatinganewbranchisquickANDsimple.>>>>>>>feature1
如果提交的过程中发现进入了VIM编辑器 出现#开头的代码 无法继续操作的时候,可以尝试 切换到大写 输入ZZ 即可解决
还有一种情况需要:q 然后输入A 具体问题遇到可以搜索匹配一下
链接://www.greatytc.com/p/78246673c545