git权威指南

简介

分布式的版本控制工具,

优势:

在任何地点(在上班的地铁 上)提交自己的代码和查看代码版本; 方便地开发分支。

常用命令

1. 初始化:

   git clone:已经有一个远程的Git版本库,如:git clone git@192.168.XXX:source

   git init和git remote

2. 基本命令

     在任何Git命令后加上'--help'就会显示该命令的帮助文档,例如 'git log --help'你就可以看到命令'git log'的所有使用方法。

     gitpull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本库的代码更新到本地的master主枝,该功能类似于SVN的update

    git add:是将当前更改或者新增的文件加入到Git的index中,这也是提交之前所需要执行的一步,例如'git add app/model/user.rb'就会增加app/model/user.rb文件到Git的index中.   -u(所有修改的) -A(删除和新增的)

    git rm:从当前的工作空间中和索引中删除文件,例如'git rm app/model/user.rb'

    git commit:提交当前工作空间的修改内容,类似于SVN的commit命令,例如'git commit -m "story #3, add user model"',提交的时候必须用-m来输入一条提交信息 。 一次提交只干一件事情,或是改了一个bug,或是加入一个新功能git commit --amend (修改提交说明)

    git push:将本地commit的代码更新到远程版本库中,例如'git push origin'就会将本地的代码更新到名为orgin的远程版本库中

    git log:查看历史日志,如 git log--graph--decorate--all  log --pretty=oneline --since='2 days ago'   git log -p -1  '-p'表示查看修改的具体内容;'-n'其中n表示一个数字,这表示打印出具体的几个日志,例如 'git log -p -1  表示打印出当前最新的一次日志记录及具体修改内容;'--since="时间/日期"','--until="时间/日期"'表示你希望查找某个日期段的日志记录,例如'git log --since="2 days ago" --until="1 hourago"'就表示你希望查找两天前到一小时前的日志记录,  --pretty=格式种类',其中格式种类有full、short、oneline,raw等,例如'oneline'就会将每条代码历史记录放在一行里,full显示作者和提交者,raw显示详细信息, --stat : 看到哪些文件改动  --graph:commit之间的关系,decorate 显示关联的tag,

    git revert:还原一个版本的修改,必须提供一个具体的Git版本号,例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',Git的版本号都是生成的一个哈希值

     git mv  改变了file 的名称和location时

     git reset: 修改游标指向具体的ID。 --hard会破坏工作区未提交的改动

3. 独有命令

   git branch:对分支的增、删、查等操作,例如'git branch new_branch'会从当前的工作版本创建一个叫做new_branch的新分支,'gitbranch -D new_branch'就会强制删除叫做new_branch的分支,'git branch'就会列出本地所有的分支

    git checkout:Git的checkout有两个作用,其一是在不同的branch之间进行切换,例如 'git checkout -b new_branch'就会创建并切换到new_branch的分支上去;  另一个功能是还原代码的作用,例如'gitcheckout app/model/user.rb'就会将user.rb文件从上一个已提交的版本中更新回来,未提交的内容全部会回滚

   git tag:可以将某个具体的版本打上一个标签,这样你就不需要记忆复杂的版本号哈希值了,例如你可以使用 'git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20'来标记这个被你还原的版本,那么以后你想查看该版本时,就可以使用 revert_version标签名,而不是哈希值了

   git stash:当你不想提交当前完成了一半的代码,但是却不得不修改一个紧急Bug,那么使用'git stash'就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和版本库是完全一样的,等到修完Bug,再使用'git stash apply'将以前一半的工作应用回来。可以多次执行git stash,'git stash list'命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用'git stash apply stash@{1}'就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用'git stash clear'来将栈清空

   git format-patch:当你想给一个开源项目(例如Rails)提交一段代码的时候,或者你想给小组成员展示一段你并不想提交的代码(不能直接push的时候),Git的'format-patch'命令良好的支持了这个功能。我来基本描述一下使用这个命令的步骤和方法:第一,利用branch命令创建一个分支;第二,修改你的代码;第三,在该分支上提交你的修改;第四,使用'git format-patch'命令来生成一个patch文件,例如:'git format-patch master --stdout > ~/Desktop/tmp.patch'就是将工作分支与master主干的不同,存放在'~/Desktop'文件夹下,生成一个叫做tmp.patch的文件(另一种简单的版本是利用diff命令,例如'git diff ..master > ~/Desktop/tmp.patch'),这样就生成了patch文件。那么别人就可以使用'gitapply'命令来应用patch,例如'git apply ~/Desktop/tmp.patch'就是将patch打在当前的工作分支上

4. 其他工具

git命令的自动提示

    git citool:这是我个人使用率最频繁的一个工具,上一篇文章也提到了,Git可以本地提交代码,那么你自然可以本地修改你的提交了,这个工具就是可视化界面,用于修改你本地的提交。你可以用它来提交代码,可以用它来将你本地的修改追加在上一次提交的代码中,你还可以用它来修改你上次提交的信息等等。

   gitk:是一个查看主干/分支情况的工具,它主要用于观察整个项目的分支状况,使用'gitk'命令就会出现一个图形化界面供你查看

 

第二章

1.  在客户处工作

2.  修改提交说明

     git commit --amend(最新提交)    历史提交: gitrebase -i <commit-id>^

3. 提交了 不该有的文件(大文件):

    Git rm --cached  文件名  git commit --amend  

4. 工作进度保存

    如果同时修改bug和加入新功能, gitstash   git checkout -b 新分支;gitpush;    git checkout 旧分支; gitstash pop

5. 无处不在的分页器

   log 分页:  q退出分页器, h显示帮助   空格上翻一页   b下翻一页    /pattern向下查找   ?pattern向上查找   n/N 代表向前向后继续寻找   g/G 第一行和最后一行

第四章:Git 初始化

git配置

1)当前姓名和邮件地址;

2)git命令的别名

3)开启颜色提示;

有两种方式: 修改 /etc/gitconfig文件(git config--global -e),使用config命令 git config --global alias.st status

git目录

    工作区:git起作用的目录,其中.git文件所在是工作区的根目录。

   git grep  "工作区文件内容搜索"

第五章: git 暂存区

系统结构图

查看区别

   git diff  工作区和index的差别

   git diff HEAD :工作区和版本库的区别

   git diff --cached :  index和版本库的区别

   git log --pretty=oneline   每个commit显示为一行,用于查看是否有提交

升级

   git add (-u -A)工作区到index

   git commit   index到版本库

回退

   git reset HEAD: index被版本库复写,工作区不影响

   git rm --cached:删除index中文件,工作区不受影响

   git checkout --file (.)  index替换工作区内容,会清除工作区未添加到Index的改动

   git checkout HEAD --file(.) : 版本库替换index和工作区文件

清楚工作区改动

    1. git clean -fd :清除没有加入版本库的文件和目录 untracked;

    2. git checkout . 用index刷新工作区

不要使用 commit-a

第七章  git重置

分支游标

    gitreset : 将游标指向本分支任意一个存在的提交commit ID

用reflog挽救错误的重置

   git reflog show master | head -5  查看master 分支 head向前的5个提交

   git reset --hard master@{2}   回退到正确的(丢弃所有未提交的change)

深入了解reset命令

   git reset -q [commit] --path :  使用指定的commit 重置index,不会改变工作区, 如git resetHEAD <path> 使用版本库head 重置index中特定文件

   git reset  --soft | --hard|--mixed|--merged|--keep  -q commit  : hard 会让HEAD指向commit ,使用版本库替换index和工作区。soft 只改变head指向。 mixed或不使用参数,则修改引用和index。 如git reset (add的逆操作)  git reset --soft HEAD^ (引用回退到head^,撤销最新的提交)

    实例:

       git reset  使用head 重置index,工作区不影响

       git reset --fileName  使用head重置index中指定文件,相当于gitadd的逆操作

       git reset --soft HEAD^  放弃最新的提交(对最新的提交和提交说明不满意)

       git reset HEAD^   工作区不变, 暂存区回退提交之前,引用也回退一次

第八章 git检出

深入了解checkout 命令

    恢复文件  git checkout  -q commit  --path 主要用于工作区,reset用于index

    切换分支  git checkout branch

    创建分支  git checkout -m -b  new_branch  【commit】

    实例:

       git checkout branch :  head指针指向branch,并使用分支更新index和工作区

       git checkout  : 汇总显示 工作区、index和head的差异

       git checkout branch --file :  用分支branch中的file 回复index和工作区,head不变

       git checkout .   git  checkout --filename

第九章  恢复进度

简单实例

   git clean -nd:测试删除本地没有被track的文件和目录   git clean -fd 开始删除

使用 git stash

    保存和恢复工作进度,建议使用 apply和clear的组合

   git stash save “message”:保存工作区和index

   git stash list  查看保存的进度列表

   git stash pop  [--index][stash]  从最近保存(或指定的stash)的进度恢复, index表示index也要恢复

   git stash -q apply:  不删除进度,其他和pop一样, q代表不提示

   git stash clear:清除

   git stash branch  <branchname><stash>:根据stash内容创建分支

第十章  git基本操作

先来合个影

   git tag -m "" <tag名称>  :  为当前commit 打个tag

删除文件

   rm *.txt    本地删除文件

   git add -u :  将本地的改动(修改和删除)标记到index 

   git commit

恢复删除

   git checkout HEAD^1  --welcome.txt

   git add -A  将所有改动和新增文件添加到index

移动文件

   git mv readme.txt readme   文件改名和移动

文件忽略

    对某些目录或文件设为忽略后,执行git status不会track

   .gitignore 起作用的范围是其所在目录和子目录,分为独享式和共享式:共享式是在工作目录,并提交到版本库实现;独享式通过 config指定外部文件实现,如 git config --global core.excludesfile /home/.gitignore

文件归档

    对工作区建立压缩包,不包括忽略文件和临时文件:  git archive -o latest.zipHEAD

第十一章 历史穿梭

    查看历史提交、历史版本、进行差异比较

查看历史记录

   git log --graph  --pretty=oneline--stat

分析某一提交

   git show <commitId> --stat | -p 查看该commit的提交

差异比较

   git diff <commit1> <commmit2> --path :  显示不同commit下 path路径的差异

   git diff <path1> <paht2> 提供对非工作区的支持

   git diff branch1  branch2   对分支的比较

文件追溯

   git blame  :  针对文件执行 ,会逐行显示文件,在行首显示提交人和提交时间。 用于追溯是谁引入的bug

二分查找

   git bisect:   用于定位引入bug的第一个版本 

第十二章 改变历史

单步悔棋

   git commit --amend -m "新message"   修改上次的提交说明

   git checkout HEAD^  --file    + git commit --amend -m "new commit"    对修改内容的反悔   

多步悔棋

    将本地版本库push到远端时,将多次提交合并为一次提交

   git reset --soft <commitId> :回到最初的提交 +  git commit  完成合并

回到未来(略)

    更改某个历史版本,对后期版本都会影响

   git rebase : 将指定范围的提交嫁接到另一个提交之上(有详细介绍)

丢弃历史

    解决: 只保留最近的100次提交,抛弃之前的历史提交

反转提交

    多人协同时,没法修改他人版本库,修正一个错误历史提交的方法是反转提交   

   git revert HEAD    相当于将HEAD提交反向再提交一次

第三篇 GIT和声

第十六章

pull中的合并

   git pull =git fetch+ git merge

   git merge 支持版本库之间、本版本库中多个分支的合并,格式  git merge 选项  <commit>    。

    当执行merge 出现“mergefailed”,运行 git status 看到“unmerged”, 打开文件  <,=之间是当前分支(head)所更改的内容,=,>之间是要合并的内容。  修改文件后,使用add-u 和commit

合并四:树冲突

    两个user对同一文件移动到不同的地方,形成的冲突 

第十七章

    三种里程碑:轻量级、带注释、带签名的里程碑

第十八章 Git分支

分支类型

  release branch:主要用来修正bug


    其中白色三角是 发布时的版本, 第三步是合并到主线

    特性分支:将某个功能的开发和主线独立起来,适用于1)实验性功能开发;2)功能复杂,开发周期长的功能;3)容易冲突,影响其他人开发进度的模块。


    当得知功能2不开发时, 提交F2.X 注销掉功能2代码,创建新分支,并使用cherry-pick将mainline上前期的2.1和2.2提交拣选到新分支。

    卖主分支:针对第三方软件的定制,当第三方更新时,和现有代码的同步

分支命令

   git branch  显示本地分支列表

   git branch <branchname> <commid>  // 从head或commit创建分支

   git -d | -D branch branchName ;   删除分支, D代表强制删除,不检查是否合并到其他分支

   git -m |-M branch newBranch      重命名分支

拣选操作

   git cherry-pick commitId    拣选commitId到当前分支    

第十九章 远程版本库

远程分支

   git branch -r  :查看远程分支

   origin/master  代表远端的

    当一个分支从 origin创建时,会建立与remote的track, 则执行pull 或push时不需要参数    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值