git面试题
(1)Git是一款免费的开源的分布式版本控制系统。
(2)为了保留之前所有的版本,方便回滚和修改。
(3)集中化版本控制系统例如SVN,客户端连接到中央服务器取出最新的文件或者提交更新。所以有个很明显的缺点就是如果中央服务器发生故障,故障期间谁都无法提交更新。
分布式版本控制系统例如Git,客户端不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这样即使中央仓库发生故障,我们可以先提交到本地仓库。等故障恢复后再提交到中央仓库。
初始化命令
git init
新增文件
git add filename 或者git add .
提交文件,生成版本
git commit -m
查看工作区状况
git status
详细当前分支详细的提交历史记录
git log --graph --pretty=format:"%h %s"记录简洁图形展示
查看所有分支简化的提交历史记录(回滚当前版本之后的版本)
git reflog
版本号 回滚版本
git reset --hard
查看分支
git branch
创建分支
git branch 分支名称
切换分支
git checkout 分支名称
创建并切换分支
git checkout -b 分支名称
合并分支(可能产生冲突)
git merge 要合并的分支名称 (注意要先切换分支再合并)
删除分支
git branch -d 分支名称
添加远程连接(别名)
git remote add origin 地址
推送代码
git push origin dev
克隆远程仓库到本地
git clone 地址
拉取代码
git pull origin dev
等价于
git fetch origin dev + git merge origin/dev
修改远程仓库的地址
#直接修改配置里面的url即可
vim .git/config

git fetch只是将远程仓库的最新的版本下载到本地,但是不会自动merge,相当于工作区中的文件并没有更新
git pull会从远程仓库获取到最新的版本并merge到本地。
git pull origin dev=git fetch origin dev+git merge origin/dev;
git fetch更保险一些,git pull操作更简单

创建一个bug分支,然后进行bug处理,处理完毕后,合并到主分支前要先创建pull request给小组长检查代码,组长review成功后才能够合并到master.合并完成之后删除bug分支。然后回到dev分支继续开发

具体流程
创建dev分支,并切换到dev分支开发自己的模块

dev分支开发过程中遇到线上出现bug(master分支出现bug)

切换回master分支,创建并切换到bug分支修复bug

再切换到主分支,把bug分支合并到主分支,合并完成后删除掉bug分支

之后再切换到dev分支开发自己的模块

模块开发完毕切换到master分支,把dev分支合并到master分支。发现有冲突

我们找个这个文件,手动修改。然后提交

命令:
git rebase -i HEAD~3 合并最近的三次提交
git rebase master 将最新的分支同步到本地,可能需要手动解决冲突
git rebase --continue 解决完冲突 add添加文件后 执行此命令合并完成
场景一:比如在公司开发忘记把代码push到远程仓库,在家里又继续开发新的功能。然后到公司把昨天家里的代码合并到公司昨天代码的时候,可以用git fetch–>git rebase(修改完冲突后再使用git rebase --continue)这样提交记录就不会出现分叉,保持了提交记录的整洁
(1)公司开发忘记提交github了

(2)回到家继续开发新功能,并提交到github

(3)第二天回到公司,使用git fetch先把最新的版本下载到本地,可以先使用git diff看哪些地方不同

(4)使用git rebase合并,发现有冲突。然后看到有个提示 修改完冲突 add添加文件后 要执行git rebase --continue命令完成合并

发现没有分叉。

场景二:当我们开发一个功能时,可能会在本地有无数次commit,而你实际上在你的master分支上只想显示每一个功能测试完成后的一次完整提交记录就好了,其他的提交记录并不想将来全部保留在你的master分支上,那么rebase将会是一个好的选择,他可以在rebase时将本地多次的commit合并成一个commit,还可以修改commit的描述等
(这里强烈注意合并的提交记录最好都是没有提交到远程仓库的,不然远程仓库与本地仓库提交记录就会乱很麻烦)


合并提交的时候需要改两个文件 s表示合并到 上一个版本 ,还要设置下合并提交点提交的信息。之后再切换到主分支,将dev分支merge到主分支

场景三:本地的两个分支使用rebase合并不会产生分叉。你自己用dev分支开发自己的模块,如果别人master分支提交到远程仓库新的版本,你拷贝master分支新的版本到自己的远程仓库,如果此时你dev分支开发完成,要跟master分支进行合并时,如果使用merge就会产生新的提交点而且出现分叉,如果你想要线性的提交就必须用rebase
(1)rebase之前需要经master分支拉到最新,具体做法是切换分支到需要rebase的分支,这里是dev分支
执行git rebase master,有冲突就解决冲突,解决后直接git add . 再git rebase --continue即可(这里演示没有冲突的情况,场景一已经演示有冲突的情况)

(2)切换到master分支,执行git merge dev


总结:
1.rebase能够将多条提交记录合并为一条;
2.rebase合并分支的时候不会出现分叉。
git merge 操作合并分支会让两个分支的共同提交点之后每一次提交都按照提交时间(并不是push时间)排序,并且会将两个分支的最新一次commit点进行合并成一个新的commit,最终的分支树呈现非整条线性直线的形式
git rebase操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,rebase完成后,切到基分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性
小组长做review
自己开发的模块完成后,合并到分支前发送一个pull request给小组长,提醒他去审核pull request,系统也会发邮件提醒reviewer.如果需要修改代码,就根据reviewer的要求进行调整,修改好之后再commit/push到服务器。然后reviewer再次检查,直到代码没有问题了。reviewer或者代码的作者就可以将任务merge到master分支。
git分支的命名规范
git 分支分为集成分支、功能分支和修复分支,分别命名为 develop、feature 和 hotfix,均为单数。不可使用 features、future、hotfixes、hotfixs 等错误名称。
1.git主分支(master):它是自动建立,用于发布重大版本更新
2.git开发主分支(develop):日常开发在此分支上进行
3.git临时分支:用于应对一些特定母的的办法开发(验证成功后应该删除此分支),主要有
注意事项:一个分支尽量开发一个功能模块,不要多个功能模块在一个分支上开发。feather分支在申请合并之前,最好是先pull一下develop主分支下来,看一下有没有冲突,如果有就先解决冲突后再申请合并。
提交记录规范
每个git commit记录需要按照固定格式
具体格式为:
第一行: 作者:功能模块名称(或功能模块id)
第二行:提交描述,中英文皆可
+:增加代码
*:修改代码
-:删除代码
watch: 会持续收到该项目的动态
fork: 复制某个项目到自己的github仓库中
star,可以理解为点赞
clone,将项目下载至本地
follow,关注你感兴趣的作者,会收到他们的动态

(1)in关键词限制搜索范围
springboot in:name 项目名中包含springboot
springboot in:description 项目描述中包含springboot
springboot in:readme 项目的readme文件中包含springboot
springboot in:name,description,readme 组合使用,搜索项目名或者项目描述或者readme文件中包含springboot
(2)stars,fork 按照stars,fork的数量去搜索
springboot stars:>=5000 查找stars数大于等于5000的springboot项目
springboot forks:>=5000 查找fork数大于等于5000的springboot项目
springboot stars:2000…5000 forks:500…800 查找stars数介于2000到5000 fork数介于500…800的springboot项目

(3)awesome加强搜索
awesome redis 搜索优秀的redis相关的项目,包括框架,教程等
(4)高亮显示某一行代码
1行: 地址#L数字

多行:地址#L数字-L数字

(5)项目内搜索 按英文t就可以把文件罗列成一个列表

(6)搜索某个地区的大佬 location:地区 language:语言
location:beijing language:java 查询地区北京的java方向的用户

运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec
我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co
我正在安装gitlabhq,并且在Gemfile中有对某些资源的“git://...”的引用。但是,我在公司防火墙后面,所以我必须使用http://。我可以手动编辑Gemfile,但我想知道是否有另一种方法告诉bundler使用http://作为git存储库? 最佳答案 您可以通过运行gitconfig--globalurl."https://".insteadOfgit://或通过将以下内容添加到~/.gitconfig:[url"https://"]insteadOf=git://
我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/
Activeadmingem已添加到我的rails项目中,但每次我尝试安装railsgactive_admin:install时,我都会收到类似的错误git://github.com/activeadmin/activeadmin.git(atmaster)isnotyetcheckedout.Runbundleinstallfirst.我肯定在运行“railsgactive_admin:install”之前运行了bundle。运行“bundleshow”后,我看到我已将“*activeadmin(1.0.0.pre3f916d6)”添加到我的项目中,但不断收到此错误消息。我的gem文
自从我将我的应用程序部署到heroku以来,在过去的几天里,我一直在断断续续地收到这个错误。它发生在我开始使用unicorn作为服务器之前和之后。有时我可以通过使用herokurunrakedb:migrate然后herokurestart让它恢复运行,但这只修复了几个小时,它又坏了。至于网页,它说“应用程序错误”。日志不是很有用,但每次发生此错误时都会显示以下内容:[2014-10-27T21:13:31.675956#2]ERROR--:worker=1PID:8timeout(16s>15s),killing[2014-10-27T21:13:31.731646#14]INFO-
我在bitbucket上创建了一个私有(private)git存储库并提交了代码。现在我想导出所有(提交、代码、历史记录)并将其导入github上的gitrepo。有没有办法做到这一点?谢谢 最佳答案 在本地检查所有内容到您的计算机和gitpull。创建一个github存储库将此存储库添加为您的第二个远程(“使用gitremote添加githubURL”)推送到第二个Remote 关于ruby-git:从bitbucket导出并导入github(带提交),我们在StackOverflow