git管理文件和代码的使用

​作者:hackett

​微信公众号:加班猿

Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。Git易于学习, 占地面积小,具有闪电般的快速性能。它具有Subversion,CVS,Perforce和ClearCase之类的SCM工具,具有廉价的本地分支,方便的暂存区域和 多个工作流等功能。--《Git官网》

依稀还记得当初写论文的时候,保存的论文文档是这样子的,代码文件夹是这样的。根据需求删除或修改一些东西后另存为另一个文件,过一段时间后,想找回被删除的文字/代码,但是不知道保存在哪个文件里去了,想保留最新的一个把其他都删除掉,又怕哪天会用上不敢删除,真的烦人,这个时候就轮到我们强大的Git出场了,顺便记录一下自己从廖雪峰的官方网站Git教程的学习。

我工作中常用的指令

1、如果你没有项目的代码,组长一般都会给你一个链接,这时候你就可以用git命令git clone下来

 git clone  https://github.com/CodingEmbedded/mygit.git

2、接到主管的需求(此刻的我是想拿我的ZFB收款码出来的),一般来说都是新建一个分支的去开发的

 git check -b 分支名

3、此时就可以愉快地写bug了,有时候同事/主管问你改了什么问题,你改了挺多不记得可以先statusdiff一下可以看到我们修改了那些文件增删了那些内容

 git statusgit diff

4、写好之后就可以先git addgit commit进行本地代码的提交

 git addgit commit -m "message"

5、提交到远程仓库需要用push

 git push

6、假如在你写的时候有人提交了代码,这时候你需要pull最新的代码下来

 git pull

如果没有冲突就可以提交代码(有冲突的话就按照Git提示做修改再提交)

7、你的代码有一个致命bug,并且已经提交到了远程仓库,版本回退的方法: 先用下面命令找到要回退的版本的commit_id:

 git reflog

然后回退版本:

 git reset --hard commit_id

最后强制推送到远程分支:

git push -f

可以看到图1是提交了一个记录为“add or del”,图2图3为回退版本操作,图4图5对比可以看出git已经回退了

​图1

​图2

​图3

​图4

​图5

一、创建版本库

1、新建一个空目录(如下我是E盘 –> code目录下新建一个test版本库)

2、通过git init命令把这个目录变成Git可以管理的仓库

3、ls -ah查看.git>目录和./>../>,那是因为.git这个目录默认是隐藏的。

二、添加文件到仓库

1、编写一个文件 text.txt

2、使用命令git add <file>,可反复多次使用,添加多个文件,添加全部文件使用git add -A

3、使用命令git commit -m <message>,完成,message为提交的文本信息

三、查看工作状态和修改的文件

1、要随时掌握工作区的状态,使用git status命令。

2、如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

四、git的版本回退

1、版本回退前,用git log可以查看提交历史,以便确定要回退到哪个版本。

2、HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间回退,使用命令

git reset --hard commit_id

3、Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

4、要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。使用命令git reset --hard commit_id

五、暂存区

提交一个readme.txt的过程

六、管理修改

Git是如何跟踪修改的,每次修改,如果不用git add到暂存区,那就不会加入到commit中。

七、撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考四、git的版本回退一节(用git log查看命令历史,以便确定要回到未来的哪个版本。使用命令git reset --hard commit_id),不过前提是没有推送到远程库。

八、删除文件

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失*最近一次提交后你修改的内容*

git checkout -- <file>其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

九、添加远程库

第一步:在git下创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第二步:登陆GitHub,打开“Settings”,点“SSH and GPG keys”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key:

第二步:创建一个GitHub账号,添加一个空的仓库。首先,登陆GitHub,然后,在右上角找到“new repository”按钮,创建一个新的仓库:在Repository name填入仓库名,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:

目前,在GitHub上的这个仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

现在,我们根据GitHub的提示,在本地的仓库下运行命令:git remote add origin + ssh链接

使用命令git push -u origin master将内容推送上去。

注意:检查git的配置文件的邮箱还有用户名还有URL是否正确。才能进行下一步操作。

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;关联后,使用命令git push -u origin master第一次推送master分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改

十、从远程库克隆

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone+ ssh链接命令克隆。

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

十一、创建与分支(Git鼓励大量使用分支)

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

十二、解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。用git log --graph命令可以看到分支合并图。

十三、分支管理策略

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forwardgit merge --no-ff -m "merge with no-ff" dev 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

十四、bug分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

十五、feature分支

开发一个新feature,最好新建一个分支;如果要丢弃一 个没有被合并过的分支,可以通过git branch -D <name>强行删除。

十六、多人协作

查看远程库信息,使用git remote -v

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

十七、创建标签

命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id

命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

命令git tag可以查看所有标签

用命令git show <tagname>可以看到说明文字

注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

十八、操作标签

命令git push origin <tagname>可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签;

命令git tag -d <tagname>可以删除一个本地标签;

命令git push origin :refs/tags/<tagname>可以删除一个远程标签。 最后总结一下Git的常用命令:

  • mkdir XX (创建一个空目录 XX指目录名)
  • pwd 显示当前目录的路径。
  • git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
  • git add XX 把xx文件添加到暂存区去。
  • git commit –m “XX” 提交文件 XX是提交的注释。
  • git status 查看仓库状态
  • git diff XX 查看XX文件修改了那些内容
  • git log 查看历史记录
  • git reset --hard HEAD^或者git reset --hard HEAD~
    回退到上一个版本(使用git reset –hard commit_id回退到commit_id的指定版本 )
  • cat XX 查看XX文件内容
  • git reflog 查看历史记录的版本号id
  • git checkout -- XX 把XX文件在工作区的修改全部撤销。
  • git rm XX 删除XX文件
  • git remote add origin + SSH链接关联一个远程库
  • git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
  • git clone + SSH链接 从远程库中克隆
  • git checkout –b dev 创建dev分支 并切换到dev分支上
  • git branch 查看当前所有的分支
  • git checkout master 切换回master分支
  • git merge dev 在当前的分支上合并dev分支
  • git branch –d dev 删除dev分支
  • git branch name 创建分支
  • git fecth 手动拉取远程仓库更新的信息
  • git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
  • git stash list 查看所有被隐藏的文件列表
  • git stash apply 恢复被隐藏的文件,但是内容不删除
  • git stash drop 删除文件
  • git stash pop 恢复文件的同时 也删除文件
  • git remote 查看远程库的信息
  • git remote –v 查看远程库的详细信息
  • git push -u origin/master Git将会强制提交到master分支上
  • git --amend 简单地来说,可以理解成对最后一次提交做修正。<前提是当前最后一次提交没有merge>

参考文献

  1. Git教程 - 廖雪峰的官方网站 https://www.liaoxuefeng.com/wiki/896043488029600

如果你觉得文章还不错,记得"点赞关注"

关注我的微信公众号【 加班猿 】可以获取更多内容

chrom禁用浏览器回退按钮不管用_什么?作为程序员你都工作了还不会用Git相关推荐

  1. 屏蔽浏览器 回退按钮的方法

    I have had a lot of people ask, "How to I 慸isable?the back button?" or, "How do I pre ...

  2. vue中使用,js禁用浏览器后退按钮

    * js禁用浏览器后退按钮 * vue中使用*/ methods:{goBack(){history.pushState(null,null,document.URL);}, } destroyed( ...

  3. 当了十年 IT 程序员,我转型做自动驾驶开发的这五年”_《新程序员》编辑部的博客-CSDN博客

    "当了十年 IT 程序员,我转型做自动驾驶开发的这五年"_<新程序员>编辑部的博客-CSDN博客

  4. javascript怎么禁用浏览器后退按钮

    1. 复制代码 代码如下: <script language="JavaScript"> javascript:window.history.forward(1); & ...

  5. JavaScript禁用浏览器后退按钮

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:vs20 ...

  6. JavaScript如何实现禁用浏览器后退按钮

    方法一: <script>window.history.forward(1); </script> 利用JS产生一个"前进"的动作,以抵消后退功能,这种方法 ...

  7. 浏览器崩溃_字节跳动程序员28岁身价上亿,财务自由宣布退休;微软最新系统再迎“喜报”:更多用户的浏览器开始崩溃...

    新闻1:字节跳动程序员28岁身价上亿,财务自由宣布退休 最近字节跳动前员工郭宇火了. 原因是他在今年二月份发了一条微博.大概是说他在28岁的年纪实现了财务自由,然后选择了退休. 郭宇本来是字节跳动的一 ...

  8. 前端怎么加粗字体_【好程序员独家】100道前端面试题(精选版 含答案)

    为了方便各位热爱前端的小伙伴能够更加便捷的学习到前端,好程序员特意为大家整理100道独家HTML5大前端面试题!希望能给你带来帮助! 一.Doctype的作用?严格模式和混杂模式的区分,以及如何触发这 ...

  9. post大小限制_作为一个程序员,面试中常问的get和post的区别,你真的知道吗

    作为一个程序员无论是搞前端的还是搞后端的,只要问起来GET和POST的区别,都能说出来个一二三四来. 你可能自己写过无数个GET和POST请求,或者也看过很多权威网站总结出来的区别,你非常清楚的知道什 ...

最新文章

  1. 聊天机器人之需求分析和流程介绍
  2. 域名解析对网站SEO优化有何影响?
  3. QT的QDesignerWidgetBoxInterface类的使用
  4. JavaScript设计模式—富有表现力的Javascript(一)
  5. Python-基础-时间日期处理小结
  6. python长整数相乘_python写的大整数相乘的方法
  7. stm32单片机端口映射_STM32单片机的重映射与地址映射的使用方法及步骤
  8. Enterprise Solution 解决方案与源代码下载
  9. java解析document_java 值Document解析xml详细介绍
  10. php 读写excel 网络错误,谁用过PHPExcel,导出的文件报“无法读取的内容”错误
  11. godaddy mysql 连接 设置 2014_GoDaddy主机数据库远程访问设置的方法
  12. 二叉树的遍历--递归+非递归(两种)
  13. java lombok 插件_idea 安装 lombok 插件
  14. python curl 获取返回值_php curl_exec()函数 CURL获取返回值的方法
  15. Matter-JS Composites 混合材料 · 上
  16. 三、pgAdmin 4 布局设置
  17. delphi在linux运行,实现了delphi unigui跑在linux上
  18. Oracle10g或Oracle11g完全卸载正确步骤(亲身体验-详细图文教程)
  19. MySQL必知必会pdf
  20. c语言三角形判定条件,c语言判定三角形的各种类型——请大家指点

热门文章

  1. 如何在AWS上架设文件服务器
  2. one order event handling - 初始化过程
  3. 如何处理SAP Fiori Launchpad错误消息:Could not start the app due to a configuration problem
  4. Require Busy dialog
  5. SAP Fiori应用中事务锁的实现 - Transaction Lock实现机制
  6. 如何查看CRM WebUI,C4C和Hybris里的页面技术信息
  7. 解决mysql的乱码问题_完美解决mysql中文乱码的问题
  8. php select user 验证,php 用户验证的简单示例
  9. 数据可视化|实验五 分析1996-2015年人口数据各个特征的分布与分散状况
  10. 【测评】海康EliteX---全球首款USB4.0移动固态硬盘,硬盘黑科技,移动闪电侠