在实际的项目开发过程中,一个工程通常分为测试分支和线上分支,测试分支通常对应测试环境,线上分支的代码对应线上环境。使用git作为代码管理工具,可以方便地进行代码的迭代管理,多人协同开发,有利于提升开发效率。在使用git过程中,有一些经常使用的命令,熟练使用这些命令进行代码管理是程序开发过程中的基础。
在代码的迭代过程中,分支管理是经常遇到的问题之一,通常一个项目分为线上分支(一般使用master或online表示)、测试分支(一般使用dev表示)、及其他个人分支。代码的上线流程通常是,将本地代码提交到线上个人代码库,然后提交一个merge request到测试分支,复看代码没问题,上测试环境,前后端简单调试或者产品简单测试没问题后,提交到线上分支,上线上环境,等待质量保证部门全面测试。
更新代码通常都是从线上分支拉取(到本地)最新的代码,从本地重新起个分支,在本地自己的分支上进行代码开发,以免代码混乱。
参考https://www.cnblogs.com/nylcy/p/6569284.html From version 7.12, GitLab CI uses a YAML file (.gitlab-ci.yml) for the project configuration. It is placed in the root of your repository and contains definitions of how your project should be built.
克隆 git branch -r #查看远程分支 或 git branch -a #查看所有分支//这种方式的git clone 默认会把远程仓库整个给clone下来 git clone http://10.1.1.11/service/tmall-service.git //每个仓库有个默认的分支(在.gitlab-ci.yml中可以配置),如果不指定分支,那么就使用默认分支。bi-venus和newbi的默认分支都是online。
git clone -b dev_jk http://10.1.1.11/service/tmall-service.git 命令中:多了一个 -b dev-jk,这个dev_jk就是分支,http://10.1.1.11/service/tmall -service.git为源码的仓库地址
原文:https://blog.csdn.net/weixin_39800144/article/details/78205617
由于所有的上线代码都放在online分支,而本地代码在修改后可能已经落后线上online分支几个版本,所以在提交本地代码之前需要先从online分支拉取最新的代码。
git pull origin online git add ./* //添加本地所有更改的代码 git commit -m "说明本次改变的功能" //提交本次代码变更的注释在更改代码,未提交更改之前,可以通过如下命令查看代码状态变化及代码变化。
git status //查看分支状态 On branch sym_online1 Your branch is ahead of 'origin/sym_online1' by 1 commit. (use "git push" to publish your local commits) git diff //查看本次提交与上一个版本的差别 git push //将本地更改的代码推到代码库,如果是第一次推送,没有与git远端代码库建立联系,会报如下问题 fatal: The current branch sym_online1 has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin sym_online1 git push --set-upstream origin sym_online1 //设置远端上升流,并将本地代码推送到远端库可以通过命令 git remote show [remote-name] 查看某个远程仓库的详细信息,比如要看所克隆的 origin 仓库,可以运行:
git remote show origin上面的含义分别是: 从远程仓库 抓取master分支,但是不会merge 比较本地master分支与远程master分支的区别 合并远程分支到本地
上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp git diff tmp git merge tmp上述命令其实相当于git fetch 和 git merge 在实际使用中,git fetch更安全一些 因为在merge前,我们可以查看更新情况,然后再决定是否合并
原文:https://blog.csdn.net/TH_NUM/article/details/77847031
有时候你正在写代码,写到一半的时候需要切到另一个分支修改一个bug,这时直接切换分支是不行的,会提示让你先提交修改或者暂存起来。代码写到一半显然不能直接提交到仓库,这时候就需要用到git stash命令了,命令如下: git stash // 把当前进度保存到暂存区 再输入命令git status 就会告诉你nothing to commit,这时我们就可以正常切换分支了,在另一个分支修改完成并提交之后,再切回到当前分支,可以使用下面的命令恢复最新进度到工作区: git stash pop // 恢复最新的进度到工作区 然后我们就可以接着愉快的写代码了。 这只是简单的暂存与恢复命令,还可以参考以下命令,结合使用 git stash save ‘message’同git stash只不过增加了一些注释信息 git stash list显示暂存列表 git stash pop [stash]默认弹出最上面的那一条即stash@{0},还可以指定弹出那一条及pop后加stash@{n} git stash drap [stash]默认丢弃最上面的那一条即stash@{0},可以指定弹出哪一条同上 git stash clear清除所有的stash git show stash@{n}通过此命令可以查看stash的详情 git apply stash@{n}与pop类似,只不过不会丢弃stash 其他更多关于stash的命令请使用git stash –help命令查看Git manual。
git diff 也是主要用来比较两次提交的差异。注意:git diff 这个命令在git add 、git commit 、git push命令之前执行,才会显示本地仓库中的修改与上一个版本之间的差异。
工作区 工作区就是我们平时工作的本地仓库,此时的仓库是没有经过add的。
暂存区 暂存区是git add 之后,但未进行提交的部分。此部分为暂存区。如果我们直接执行 git diff 而不加任何参数的时候,比较的就是工作区和暂存区。
git diff branch1 branch2 --stat //显示出所有有差异的文件列表 git diff branch1 branch2 文件名(带路径) //显示指定文件的详细差异 git diff branch1 branch2 //显示出所有有差异的文件的详细差异
git diff 分支1名 分支2名 文件名 例:
git diff test origin/master test1 diff --git a/test1 b/test1 deleted file mode 100644 index 58c9bdf..0000000 --- a/test1 +++ /dev/null @@ -1 +0,0 @@ -111git diff --name-only HEAD^^|grep -v test_dir |xargs git diff test master
过滤掉不关心的文件/文件夹 git diff --name-only [HEAD or commit id] | grep -v [要过滤的文件名/文件夹名]
例: git diff --name-only HEAD^^|grep -v test_dir 结果 test11、使用场景 比如我们要在git项目中查找某个字符串等,就可以使用这个命令。这个grep类似于linux中的grep,都是搜索的意思。
2、实例 git grep -R ‘xxx’ ./app/ //搜索在app目录下的所有xxx字符串 1)这里的-R就相当于全部搜索。 2)xxx相当于要搜索的字符串 3) ./app/是我要搜索的目录 4)结果会显示这个字符串出现在文件中的具体位置,我们根据提示就可以轻易找到
每个分支开发结束,代码合并入 git代码库的dev测试、master/online线上分支之后,自己的分支就没必要一直保留了,这样代码库的分支会越来越多,可以每次个人分支合并到dev/master/online分支之后,将本地/远端的个人分支清理掉。 清理本地分支命令:git branch -d branch_name
git checkout online //先切换到其他分支 git branch -d branch_name //然后删除本地分支 git pull origin online //再从线上分支拉取最新代码 git checkout -b new_branch //新建并切换到新分支,在最新线上分支的基础上修改代码清理远端分支命令:git push origin --delete branch_name git push origin --delete branch_name 舍弃本地分支修改 参考原文:https://blog.csdn.net/u012672646/article/details/56676804
git checkout . && git clean -df //可以放弃所有修改、新增、删除文件 git checkout . //放弃本地修改,没有提交的可以回到未修改前版本 git clean 是从工作目录中移除没有track的文件。通常的参数是git clean -df,其中-d表示同时移除目录,-f表示force,因为在git的配置文件中,clean.requireForce=true,如果不加-f,clean将会拒绝执行。
或者使用如下命令,将本地分支新增(修改)的代码恢复到未修改之前: 参考https://blog.csdn.net/leedaning/article/details/51304690
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop恢复 git reset --hard HASHCode #返回到某个节点,不保留修改 git reset --soft HASHCode #返回到某个节点,保留修改 git clean -df #返回到某个节点 git clean 参数 -n 显示将要删除的文件和目录,-n参数表示“dry-run”即演练不实际执行 -d 表示移除目录 -f 表示强制删除文件 -x 表示仅删除.gitignore里标记过的文件,那些既不被git版本控制,又不在.gitignore中的文件会被保留。 -df 表示同时删除文件和目录注意慎用:git clean -xdf 命令,这个是危险命令,执行这个前先执行git clean -nxdf以显示将要删除的文件和目录,再做决定是否确定执行git clean -xdf命令删除这些文件和目录。注意一旦执行这个-xdf命令以后,所有被.gitignore忽略的文件和文件夹全部删了,而且回收站里也找不回来了
一个分支结构目录发生了很大的改变(例如新增了几个 module)或者是进行了代码工程结构的调整;此时如果从该分支切换到其他分支,由于配置了 .gitignore 文件,新增的 module产生的临时文件或者一些untracked 文件不会被自动删除;此时工程目录结构就会产生很多对当前分支来说多余的文件夹。那么遇到这种问题如何解决呢? 只需要在 git checkout 目录之后执行 git clean -df 命令就可以清理待多余的文件夹,拥有一个清新的目录结构
在使用git管理代码时,有时需要将指定的文件排除在外(不上传到gitlab代码库),例如使用vs code编辑代码时,会在当前项目的./vscode目录中经常出现launch.json这个配置文件,如果没注意就会把这个配置文件推送到代码库。所以,在每次拉代码时,需要在该项目的.gitignore文件中,将指定文件忽略掉(不上传代码库),在.gitignore文件中直接加入要忽略文件的(相对)路径和文件名即可,如下将.vscode/目录下的所有文件忽略。
.dockerignore .idea/ .med/ *.test *.so tmp/ *.txt *.text *_back *#*# config.toml .vscode/