git小白的命令行初体验
现在版本控制使用git的挺多,之前常用SVN,偶尔使用Git也是使用可视化工具操作(sourcTree,IDE自带的Git功能),之前不求甚解,所以对git的了解相当浅薄,后来遇到问题只能一次一次去查资料,后来用的多了就觉得麻烦,所以整理一下git的相关命令行操作,以备后用!因为分值操作相关较多且稍复杂,统一放在文章后面
git最常用的基本命令
1.查看当前git版本(判断是否安装过git)
git --version
2.git下载代码
git clone http://gitlab.tech.xxx.com/xxx/backend-view.git
项目地址在gitlab项目地址复制粘贴即可(全局配置权限后以后即可不用输入,不再赘述)
3.修改编辑项目常用
// 查看当前仓库文件状态(常在提交文件之前查看,会显示新增文件删除文件,已修改文件等状态)
git status
// 添加文件
git add . // 添加所有已修改文件
git add fileName // 添加指定文件名的文件(可在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 newBranch
git 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 :delBranchName
git push origin --delete delBranchName
// 切换分支,分支跟踪, 本地分支和远程分支的关系
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 status
git add
git commit -m ""
git pull
git push (develop-author分支,即自己的开发分支)
以后(把本地代码推送到远程对应分支)
2.git checkout lastest (切换到lastest分支)
3.git pull origin lastest (先把远程lastest分支修改内容拉取,多人开发,需要把远程lastest上的代码pull下来)
4.git merge develop-author (合并自己的分支到lastest)
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 是否多出了一些绿色的文件名称,检查文件没有 ====的冲突提示以及修复冲突以后重新提交即可
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
如果提交的过程中发现进入了VIM编辑器 出现#开头的代码 无法继续操作的时候,可以尝试 切换到大写 输入ZZ 即可解决
还有一种情况需要:q 然后输入A 具体问题遇到可以搜索匹配一下