Git由浅入深总结

一、创建版本库

  • 初始化一个Git仓库,使用git init命令。
  • 添加文件到Git仓库,主要分两步:
    • 第一步,使用命令git add file 注意,可反复多次使用,添加多个文件;
    • 若多人操作通常 还使用命令git pull 可以将自己提交的和小伙伴们提交进行整合,下拉得到最新版本项目
    • 第二步,使用命令git commit -m "说明",完成提交。
    • (最后)若多人操作通常,使用命令git push ,将本地库的内容推送到远程。

二、 查看当前状态

  • 要随时掌握工作区的状态,使用git status 命令
  • 如果git status告诉你有文件被修改过,用git diff 可以查看修改的内容

三、 版本回退

  • HEAD 指向的版本为当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --head commit_id
    HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。或者指定版本Id commit_id
  • 穿梭前,用git log 可以查看提交历史 ,以便确定要回退到哪个版本。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数查看。git log --pretty=oneline
  • 要重返未来,用git reflog 查看命令历史,以便确定要回到哪个未来的哪个版本。

四、 工作区和暂存区

  1. 工作区:就是你在电脑里能看到的目录,一个项目(文件夹)
  2. 暂存区: 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

1

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支

五、 管理修改

  • 多次修改时,第一次修改 -> git add 修改过的文件 -> 第二次修改 -> git add 修改过的文件 -> git commit
    提交后,用git diff HEAD -- file命令可以查看工作区和版本库里面最新版本的区别
  • 多次修改时, 也可使用 git add . 意思是: 添加全部修改

六、 撤销修改

修改全部撤销,这里有两种情况:

  • file自修改后 未被放到暂存区,现在,撤销修改就回到和未修改前版本库一模一样的状态,使用命令 git checkout -- file
  • flie 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态, 使用命令 git reset HEAD file(退回到未被放到暂存区) - > git checkout -- file (回到和未修改前版本库一模一样的状态)

七、 删除文件/远程库

  • 命令git rm file用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容
  • 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本git checkout -- file其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
    -删除已关联的名为origin的远程库 git remote rm origin

八、关联远程库

  • 要关联一个远程库,使用命令git remote add origin git@github.com:你自己的GitHub账户名/你的仓库名.git
  • 关联后,使用命令第一次推送:git push -u origin master, 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
  • 此后,由于不是第一次推送内容,每次本地提交后,只要有必要,使用命令git push origin master 就可以推送最新修改

九、 从远程库克隆

  • 要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone git@github.com:你自己的GitHub账户名/你的仓库名.git命令克隆。
  • Git支持多种协议,包括httpsgit clone https://github.com/你自己的GitHub账户名/你的仓库名.git但通过ssh支持的原生git协议速度最快。

十、创建与合并分支

Git鼓励大量使用分支:

  • 查看所有分支:git branch ,当前分支前面会标一个 * 号。
  • 创建分支:git branch <branchName>
  • 切换分支:git checkout <branchName>
  • 创建+切换分支:git checkout -b <branchName>
  • 合并某分支到当前分支:git merge <branchName>
  • 删除分支:git branch -d <branchName>
  • 强行删除分支: git branch -D <branchName>

十一、解决冲突

  • Git用<<<<<<<=======>>>>>>>标记出不同分支的内容
  • 当Git无法自动合并分支时,就必须首先 手动解决冲突。解决冲突后,再 添加修改, 再提交,合并完成。
  • git log --graph --pretty=oneline --abbrev-commit命令可以看到分支合并图。

十二、分支管理策略

  • Git分支十分强大,在团队开发中应该充分应用。
  • 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 git merge --no-ff -m "说明" branchName

十三、Bug分支

  • 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除
  • 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,回到工作现场。Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
    • 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
    • 另一种方式是用git stash pop,恢复的同时把stash内容也删了
  • 你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:$ git stash apply stash@{0}

十四、多人协作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的
  • 从本地推送分支,使用git push origin branch-name 推送自己的修改
  • 如果推送失败,则因为远程分支比你的本地更新, 需要先用git pull抓取远程的新提交试图合并
  • 如果合并有冲突,则解决冲突,并在本地提交
  • 没有冲突或者解决掉冲突后,再用git push origin branchName推送就能成功!
  • 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branchName origin/branchName

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

十五、标签管理

添加标签
  • 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id
  • git tag -a <tagname> -m "说明"可以指定标签信息
  • git tag -s <tagname> -m "说明"可以用PGP签名标签
  • 命令 git show <tagname> 查看标签信息
  • 命令git tag可以查看所有标签
  • 标签不是按时间顺序列出,而是按字母排序的
删除标签
  • 命令git push origin <tagname>可以推送一个本地标签
  • 命令git push origin --tags可以推送全部未推送过的本地标签
  • 命令git tag -d <tagname>可以删除一个本地标签
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

十六、忽略特殊文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

忽略文件的原则是:

  • 忽略操作系统自动生成的文件,比如缩略图等
  • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件
  • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

步骤:

  • 忽略某些文件时,需要编写.gitignore
  • .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理
  • 如果你确实想添加该文件,发现添加不了,可以用-fgit add -f file 强制添加到Git
  • 或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查git check-ignore -v file

仅是个人的总结而已,若有什么不妥的地方请大家多多指教。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值