大牛总结的Git使用技巧,写得很好的Work,如果开发中遇到问题,可以回去参考参考。由于水平有限,难免有错误,欢迎指正。什么是Git官方说法:Git是一个免费开源的分布式版本控制系统,旨在快速高效地处理从小型项目到大型项目的所有事情。引用廖雪峰老师的话,它可以自动帮我记录每一个文件的变化,还可以让同事协同编辑,这样我就不用自己去管理一堆类似的文件,也不需要来回传递文件??。如果你想看到变化,你只需要在软件中看一眼就可以了。为什么要学Git面试被问到。可以应付面试。许多公司使用Git来处理项目。现在不学,以后肯定得学。在我看来,Git是现在所有程序员都必须掌握的东西,以后和同事一起开发项目一定要用到它。熟练掌握Git命令可以提高开发效率。安装GitWindows,直接从官网下载。下载完成后,右键点击一个文件,如果有GitBashHere,则安装成功。安装完成后在命令行输入$gitconfig--globaluser.name"你的名字"$gitconfig--globaluser.email"你的邮箱"global是全局的意思,本机所有Git仓库都会使用这个配置。允许个别仓库MacMac也可以像Windows一样按照上面的步骤安装,也可以直接从AppStore安装Xcode,Xcode集成了Git,但是默认没有安装,需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出的窗口中找到“Downloads”,选择“CommandLineTools”,点击“Install”完成安装。Warehouse本地仓库为远程仓库,本地warehouse=workspace+versionarea.workspace是磁盘上文件的集合,versionarea(repository)就是.git文件.Repository=暂存区(stage)+branch(master)+pointerHead。以我最常用的git命令为例,即提交到github为例。gitinit原来的本地仓库只包含工作空间,这是最常见的工作状态。此时gitinit的意思就是在本地创建一个.git文件,建立版本区。混帐添加。表示将工作区中的所有文件提交到版本区中的暂存区。当然,你也可以通过gitadd./xxx/,将它们一个一个地批量添加到暂存区。gitcommit-m"xxx"将暂存区的文件全部提交到仓库区,暂存区为空。gitremoteaddoriginhttps://github.com/name/name_cangku.git连接本地仓库和远程仓库。gitpush-uoriginmaster将仓库区的文件提交到远程仓库。提交后,如果您未对工作区进行任何更改,则工作区是“干净的”。会有nothingtocommit,workingtreeclean等信息提交到GitHub。之前不熟悉git命令的时候,直接在网页上拉取文件,提交,直接把项目提交到GitHub。有点羞耻。初始化。初始化就是把这个文件变成一个Git可以管理的仓库。初始化完成后,打开隐藏文件,可以看到有一个.git文件。gitadd之后的一个点。表示将所有文件提交到暂存区。gitadd./readme.md/表示将这个文件下的readme.md文件提交到暂存区。gitcommit-m"Youwanttocommentonsomething"gitcommit的意思是将暂存区的文件全部提交到本地仓库。-m后跟注释。gitremoteaddoriginhttps://github.com/name/name_cangku.git意思是把你本地的仓库和GitHub上的远程仓库连接起来。只需要连接一次,以后提交的时候不需要感谢这个命令。name是你的github名字,name_cangku是你的仓库名。注意不要错过下面的.git。因为我前面就是这样走的,走了很多弯路。至于如何在GitHub上新建仓库,网上教程很多,这里不再赘述。gitpush-uoriginmaster将本地仓库提交到远程仓库。(最后一步)刷新你的远程仓库就可以看到你提交的文件了。最后要提的是,你可以在gitcommit-m""之前重复gitadd到暂存区。但是gitcommit会将你之前存放在暂存区的所有文件一次性提交到本地仓库。一个文件的版本回溯和正向提交,有时候我们会提交很多次,在提交历史中,这会产生不同的版本。对于每个提交,Git将它们串在一起形成一个时间线。如何回到我们提交的上一个版本,只需要使用gitreset--hard+版本号。版本号可以用gitlog查看,每个版本都会生成不同的版本号。回溯后查看git日志,发现离我们最近的那个版本已经消失了。但我也想前进到最新版本怎么办?只需gitreset--hard+versionnumber即可。退一步说,虽然我们可以通过gitreset--hard+versionnumber,但是我们可以通过记住版本号来在不同版本之间来回穿梭。但是,如果有时会丢失版本号怎么办?gitreflog帮你记录每一条命令,方便你查找版本号,方便你通过gitreset切换版本。撤消场景一:当你在工作区,你修改了一些东西,你想撤消修改,gitcheckout--file。廖雪峰老师指出,撤消修改会回到与版本库相同的状态,即用版本库中的版本替换工作区中的版本。场景二:你修改了一个内容,让git添加到暂存区。如果我想取消怎么办?回溯版本,gitreset--hard+版本号,然后gitcheckout--file,替换workspace中的版本。场景3:你修改了一个内容,并让git将它提交给master。与场景2一样,该版本被回溯,然后被撤销。删除如果你在暂存区git添加一个文件,然后在工作区删除这个文件,Git就会知道你删除了这个文件。如果要删除版本库中的文件,gitrm和gitcommit-m"xxx"。如果误删除了工作区中的文件怎么办?使用撤消命令,gitcheckout--即可。这再次证明undo命令实际上是将工作区中的版本替换为存储库中的版本。无论工作空间被修改还是删除,都可以“一键恢复”。枝与枝,就像廖雪峰老师所说的平行宇宙。你创建一个属于你的分支,别人看不到,在原来的分支上继续正常工作,而你在自己的分支上工作,想提交就提交,直到开发完成,然后合并到上原来的分支,这样既安全又不影响其他人的工作。使用Git和Github提高工作效率的10个技巧!这篇文章也值得推荐。在创建和合并分支时,在没有插入其他分支的情况下,只有一个master主分支。每次提交gitpush-uoriginmaster时,你添加一个时间轴,master会随之移动。创建other的分支,通过other提交。虽然时间轴向前移动了,但总分主还是在原来的位置上。理论分析完了,我们来看看命令怎么写。创建分支other并切换到other分支。gitbranchothergitcheckoutother查看当前所有分支gitbranch*othermaster的当前分支会有一个*submitgitadd./xxx/gitcommit-m"xxx"otherbranchwithother完成,切换回mastergitcheckoutmaster此时master上没有其他文件分支,因为分支还没有合并。合并分支gitmergeother合并后,可以查看master分支上的文件。删除另一个分支gitbranch-dother。由此,我想到,在以后的工作中,一个开放的小组应该共同开发一个项目。组长会创建很多分支。每个分支可以交给一个人来开发某个功能。一个小组将共同开发一个项目。互不干扰地发展。谁的功能完成,组长可以合并完成的分支。哦完美!解决合并分支的问题如果出现这种情况,分支other已经commit了,但是此时指针又指向master,而master没有合并,通过gitadd/commit提交。这样就产生了冲突,主分支master文件的内容和其他分支的内容不一样。不能合并!因此,修改文件内容,使其保持一致。gitaddgitcommit提交。分支被合并。gitlog--graph查看分支合并图gitbranch-dother删除分支,任务结束。分支管理策略gitmerge--no-ffother禁用了Fastforward模式,因为使用Fastforward模式删除分支后,分支历史信息会丢失。超详细的Git实战教程,傻子都能看懂!这篇文章也值得推荐。BUG分支廖雪峰老师提到,工作中的每一个BUG都可以通过一个新的临时分支来修复。修复后合并分支,删除临时分支。但是如果你手里有一个分支,你的上级要你修复另一个分支的BUG。需要保存当前工作分支,gitstash,“存储”当前工作站点,恢复后继续工作。当你解决BUG时,gitcheckoutother返回到自己的分支。使用gitstashlist查看你刚刚“隐藏”的工作去了哪里。此时你想恢复工作:gitstashapply恢复而不删除stash内容,gitstashdrop删除stash内容。当gitstashpop恢复时,存储的内容也被删除。这时候用gitstashlist查看,是看不到任何stash内容的。总结:修复bug时,我们会新建一个bug分支修复,然后合并,最后删除;当手头的工作没有完成时,先gitstash工作现场,然后去修复bug,修复之后再gitstashpop,回到工作现场删除分支gitbranch-d+branchmayfail删除,因为Git会保护没有被合并的分支。gitbranch-D+branch强制删除,丢弃未合并的分支。多人协作gitremote查看远程仓库信息,会显示origin。远程存储库的默认名称是origin。gitremote-v显示更详细的信息。gitpush-uoriginmaster将master分支推送到origin远程仓库。gitpush-uoriginother将other推送到origin远程仓库。当抓取分支产生上图冲突时,gitpull从远程仓库抓取最新的commit,在本地合并,解决冲突。如果gitpull过程中gitpull失败,还需要指定分支之间的链接。Git会在这一步提醒你怎么做。然后git拉。廖雪峰老师总结:多人协作的工作模式通常是这样的:首先可以尝试使用gitpushorigin来推送自己的改动;如果推送失败,因为远程分支比你本地分支新,你需要使用gitpull尝试合并;如果合并有冲突,解决冲突,在本地提交;如果没有冲突或者冲突解决了,再用gitpushorigin推送成功!如果gitpull提示没有跟踪信息,说明本地分支和远程分支的链接关系还没有建立。使用命令gitbranch--set-upstream-toorigin/。Rebasegitrebase将分叉的提交历史“组织”成一条直线,看起来更直观。缺点是修改了本地的forkedcommit。最后执行gitpush-uoriginmasterrebase的目的是为了方便我们查看历史提交的变化,因为分叉提交需要三路比较。标签管理比如,如果要上线一个APP,通常会在版本库中放置一个标签(tag),从而确定被标签的版本。以后无论什么时候,取一个打标签的版本,就是取打标签那一刻的历史版本。因此,标签也是存储库的快照。虽然Git标签是存储库的快照,但它实际上是指向提交的指针。Tag其实是一个有意义的名字,好记,和commit绑定。比如tagv2.1指的是一个历史版本叫v2.1创建tag的步骤:gitbranch查看当前分支,gitcheckoutmaster切换到master分支。gittag
