git学习入门~~~

创建版本库(又名仓库,repository),可以理解为一个仓库,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

 

创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

 

 
<span style="color:#3366ff">1.
$ mkdir learngit
$ cd learngit
$ pwd2.
初始化一个Git仓库,使用git init命令。3.
添加文件到Git仓库,分两步:第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;(多次add不同的文件)第二步,使用命令git commit,完成。(commit可以一次提交很多文件)4. 
随时掌握工作区的状态,使用git status命令。如果git status告诉你有文件被修改过,用git diff可以查看修改内容。</span>
5. 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
git reset --hard commit_idgit reset --hard head^(回到上一个版本)git reset --hard 版本号(回到未来或过去都可以)

6. 只是指针在变化:

7. 版本库的管理

8. 为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件

9. 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时(还没add之前),用命令git checkout -- file(--前后各有一个空格)。git checkout -- readme.txt

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

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

git  reset --hard  版本号

10. 

    vim test.txt(退出方式:i(表示插入),esc准备退出。ZZ,保存并退出;:q!(不保存退出)

     git add test.txt    git commit -m"add a new file"

    想要从版本库中删掉该文件:git rm test.txt, git commit -m"delete the test.txt"

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

11. 远程仓库:

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

 

分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!

 

git和SVN的区别:

 

Git和SVN还是挺像的,都有提交,合并等操作

下面是区别:

1. Git是分布式的,SVN是集中式的,好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交、合并,也可以不用联网在本地提交

2. Git下载下来后,在本地不必联网就可以看到所有的log,很方便学习,SVN却需要联网;

3. Git鼓励分Branch,而SVN,说实话,我用Branch的次数还挺少的,SVN自带的Branch merge我还真没用过,有merge时用的是Beyond Compare工具合并后再Commit的;

4. Tortoise也有出Git版本;

5. SVN在Commit前,我们都建议是先Update一下,跟本地的代码编译没问题,并确保开发的功能正常后再提交,这样其实挺麻烦的,有好几次同事没有先Updata,就Commit了,发生了一些错误,耽误了大家时间,Git可能这种情况会少些。

参考博文:https://blog.csdn.net/a117653909/article/details/8952183

12. 远程仓库的克隆:

 

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

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

13。 分支管理;

 

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

14. 创建合并分支:

 

Git鼓励大量使用分支:

查看分支:git branch(git branch)

创建分支:git branch <name>(git checkout -b dev)

切换分支:git checkout <name>

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

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

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

 

15. 解决合并的冲突:

 

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

git log --graph命令可以看到分支合并图。

 

16. 不使用fast forword方式来合并分支:

 

17. bug分支管理:

 

修复bug时,我们可以通过创建新的bug分支进行修复,然后合并,最后删除;git checkout -b dev; git merge dev;

git checkout master;git branch -d dev

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场

git stash ; git stash list; git stash pop;git stash list.

18. feature分支:

 

开发一个新feature,最好新建一个分支;git checkout -b dev; git add test.txt;git commit -m"add a test.txt";git checkout master;git merge dev之前

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。git branch -D dev(强行删除)

 

19. 多人协作:

 

 

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;git push origin dev

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;(如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name)git branch --set-upstream dev origin/dev;git pull

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!git push origin dev

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

总结:

 

  • 查看远程库信息,使用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,如果有冲突,要先处理冲突。

20. 创建标签

  • 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;git tag v1.0 fedsf1

  • git tag -a <tagname> -m "blablabla..."可以指定标签信息;git tag -a v0.9 -m "add a new tag"

  • git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;

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

 

 

21. 操作标签

 

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

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

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

  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签git push origin :refs/tags/v1.0

22. 使用github

 

 

  • 在GitHub上,可以任意Fork开源仓库;fork之后使用:git clone git@github.com:linhj-james/learngit-1.git

    git@github.com:linhj-james/learngit-1.git
    git@github.com:linhj-james/learngit-1.git
  • 自己拥有Fork后的仓库的读写权限; pull request

  • 可以推送pull request给官方仓库来贡献代码。

 

23. 最后,供上版本管理常用命令:

git clone git@github.com:linhj-james/learngit.git(你的远程地址)

git init (初始化一个新建的仓库)

git status (所在文件夹的文件状态)

git diff(显示两次文件的修改的不同之处)

git add (+filename)

git commit -m"add some chages"

git log(显示记录)

git branch (查看分支)

git checkout -b dev(新建并切换到另一个分支dev分支去)

git branch master (切换到master分支去)

git branch -d dev(删除dev分支)、

git tag v1.0(贴上v1.0的标签)

 

git remote -v(查看远程里连接的状态)

(git remote add origin (远程仓库地址))

git remote show <remote>(显示remote的信息)

git pull <remote><branch>(看上面)

git fetch <remote>

git push <remote><branch>(git push origin maste)

 

git merge <branch>(dev)

git rm <resolved files>

git reset --hard head^

自己总结一下常用 的操作:

一。 . 上传本地文件到github

步骤:

1. 先各自在远程仓库和本地仓库建一个文件夹(仓库)

2. git init(初始化仓库)

3. git add (+文件名)

4. git commit -m"add a new file"

5.git remote -v(查看远程仓库的连接情况,把无关的git remote rm origin(移出掉))

6. git remote add origin (+远程仓库地址)(建立远程仓库)

 

7. git pull --rebase origin master

git pull = git fetch + git merge

git pull --rebase = git fetch + git rebase(创建一个新的虚拟提交R)(关于git merge和git rebase 的区别可以参考:https://www.cnblogs.com/kevingrace/p/5896706.html)

 

8. git push -u origin master(有时候会出错,如果排除7的问题可以使用:git push -f origin master(利用本地分支去覆盖远程仓库))

 

新手如何提交本地文件到github上,几步走:

1、本地创建文件夹,创建本地仓库,【git init】;

2、执行【git add .】,将文件都提交到仓库;

3、执行【git commit -m "注释语句" 】命令,将索引内容添加到仓库中;

4、在github上创建一个repository;

5、将本地的仓库关联到Github上,git remote add origin https://github.com/……(你的用户名)/Test.git(你项目的名字)

6、上传代码到github远程仓库,git push -u origin master

 

二。 克隆:

git clone (+远程仓库地址)

 

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000(转载博文)

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux(Ubuntu)设置系统时区

设置东八区的时间&#xff1a; #cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 查看&#xff1a; #date 如果现实CST即为正确。 另外&#xff0c;Java打成jar包后再linux下运行&#xff0c;获取的时间有可能不正确&#xff0c;我们需要修改一个文件&#xff0c;Ubuntu系…

兰州交通大学计算机科学与技术排名,兰州交通大学怎么样 全国排名是多少

兰州交通大学&#xff0c;原名兰州铁道学院&#xff0c;是我国第三所铁路院校。兰州交通大学学科特色鲜明、门类齐全&#xff0c;是中央部委投资省部共建重点大学&#xff0c;下面小编为大家详细介绍&#xff0c;供大家参考。兰州交通大学排名2020年兰州交通大学全国排名第166名…

数据库的哪些事儿~~

一 . 事务的四个特性&#xff1f; 四大特性是&#xff1a;ACID 原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、持久性&#xff08;Durability&#xff09;介绍四个特性概念&#xff1b; 原…

众友科技计算机组成原理,组成原理:采用微程序控制器的模型机CPU设计(10页)-原创力文档...

课程设计报告课程名称&#xff1a; 计算机组成原理设计题目&#xff1a; 采用微程序控制器的模型机 CPU设计院 系&#xff1a;班 级&#xff1a;设 计 者&#xff1a;学 号&#xff1a;指导教师&#xff1a;目 录课程设计(大作业)报告 1昆明学院课程设计(大作业)任务书 错误&am…

JVM 运行时数据区域总结

引言 本博客总结自《深入理解 Java 虚拟机》&#xff0c;第二章。 一、概述 Java 虚拟机在执行 Java 程序的时候会把它所管理的内存划分为若干个不同的数据区域。 记忆口诀&#xff1a;两栈一计数&#xff0c;一堆一方法。 解释&#xff1a;第一句两栈分别是VM栈和本地方法栈…

一篇博客读懂设计模式之---单例模式

一篇博客读懂设计模式之---单例模式 一。 单例模式 单例对象&#xff08;Singleton&#xff09;是一种常用的设计模式。在Java应用中&#xff0c;单例对象能保证在一个JVM中&#xff0c;该对象只有一个实例存在。这样的模式有几个好处&#xff1a; 1、某些类创建比较频繁&…

计算机会计知识竞赛,全国企业会计信息化知识竞赛试题及答案

全国企业会计信息化知识竞赛试题及答案第 1 题(单选)下列各项中&#xff0c;符合会计软件不可逆的记账功能要求的是( A )A.记账标记不得通过任何操作予以取消B.不可以用红字凭证更正记账错误C.可以删除已经记账的记账凭证D.可以进行反记账第 2 题(单选)下列关于信息系统自动生成…

使用缓冲字节流:BufferedInputStream与BufferedOutputStream读写数据

功能逻辑&#xff1a;将一个视频文件通过缓冲字节输入流进行读取&#xff0c;然后再通过缓冲字节输出流将其重新拷贝输出。public static void main(String[] args) {try {FileInputStream fis new FileInputStream("Rick_and_Morty.mkv");//第二个参数指定了缓冲区…

多媒体计算机技术的主要特点,多媒体技术主要特点?

满意答案01and032013.11.24采纳率&#xff1a;41% 等级&#xff1a;11已帮助&#xff1a;5479人多媒体技术有以下几个主要特点&#xff1a;(1)集成性 能够对信息进行多通道统一获取、存储、组织与合成。(2)控制性 多媒体技术是以计算机为中心&#xff0c;综合处理和控制多媒…

java io流的学习总结~~

java io流的学习总结~~流的概念和作用流是一组有顺序的&#xff0c;有起点和终点的字节集合&#xff0c;是对数据传输的总称或抽象。即数据在两设备间的传输称为流&#xff0c;流的本质是数据传输&#xff0c;根据数据传输特性将流抽象为各种类&#xff0c;方便更直观的进行数据…

计算机组成原理第二章数据,计算机组成原理第二章数据在计算机中的表示

计算机组成原理第二章数据在计算机中的表示 (91页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;14.90 积分第二章 数据在计算机中的表示 n 概述 n 字符编码 n 中文编码 n 逻辑数据 n 数值数据 n 校验…

linux 指令学习总结~~~

linux 指令学习总结~~~目录操作&#xff1a;mkdir $HOME/testFolder&#xff08;创建一个目录&#xff09; cd ./testFolder(cd $HOME/testFolder)&#xff08;切换目录&#xff09; cd ..&#xff08;切换到上级目录&#xff09; mv $HOME/testFolder /var/tmp/&#xff08;移…

Java移位运算

博客理由&#xff1a;景区APP项目中涉及到分布式ID设计。分别有几种ID的设计方式&#xff1a;一种是数据库的自增&#xff0c;但是局限很大&#xff1b;第二种uuid&#xff0c;直接采用jdk自带的uuid生成即可&#xff1b;第三种是Twitter的Snowflake(雪花)ID生成技术&#xff0…

计算机的外部设备 硬盘,外部设备采用SMB协议想共享电脑硬盘下的文件

您好&#xff01;很抱歉这么晚回复您&#xff0c;请您尝试以下的步骤&#xff1a;1、右键点击”此电脑“&#xff0c;选择“管理”&#xff0c;展开“本地用户和组”&#xff0c;右键点击“Guest”&#xff0c;设置密码为空密码&#xff1b;取消帐户已禁用&#xff0c;点选“用…

史上最全的ubuntu服务器搭建环境教程~~~

ubuntu服务器搭建环境~~~ 1. 先安装xshell&#xff1a;远程服务器连接&#xff08;取代直接在浏览器 上 访问&#xff09; 2. 安装xftp&#xff08;ftp文件传输&#xff09;直接双击红色圈圈即可3. 安装mysql数据库&#xff1a;指令&#xff1a;sudo apt-get updatesudo apt-ge…

Apache工具包方法——Hex.encodeHexString(byte[] data)源码浅析

【2019-07-02 注&#xff1a;标题是Hex.encodeHexString(byte[] data) 的源码解析&#xff0c;但在实际测试过程中&#xff0c;改了方法名称&#xff0c;内部实现还是完全一样的。】 最近正在研究加密的相关方法和思想&#xff0c;有时候会用到byte类型的数组密钥或者密文&…

Spring Boot————简介与Spring时代的承接

引言 最近&#xff0c;公司正在开发一个景区系统的项目&#xff0c;涉及到Spring Boot框架的使用&#xff0c;在此记录下Spring Boot框架应该知道的基础知识。 一、产生 SpringBoot是顺应现在微服务&#xff08;MicroServices&#xff09;理念而产生的一个微框架&#xff08…

计算机考试400,400作文:电脑考试

400作文&#xff1a;电脑考试今天下午第三节课是大家最爱的电脑课&#xff0c;第三节课的上课铃还没敲响&#xff0c;大家就早早来到电脑室门口&#xff0c;拍好整齐的队伍&#xff0c;等待电脑金老师来带领我们进电脑室。终于&#xff0c;金老师面带微笑从办公室走到了我们这边…

史上最容易理解的暴力递归和动态规划~~

史上最容易理解的暴力递归和动态规划~~介绍递归和动态规划暴力递归&#xff1a;1&#xff0c; 把问题转化为规模缩小了的同类问题的子问题2&#xff0c; 有明确的不需要继续进行递归的条件(base case)3&#xff0c; 有当得到了子问题的结果之后的决策过程 4&#xff0c; 不记录…

英雄联盟与人生奋斗的类比讨论

自从去年毕业之后就已经很少玩英雄联盟了&#xff0c;最近半年更是一次都没碰过这个游戏了。 更新还是异常的频繁&#xff0c;打斗还是异常的激烈&#xff0c;比赛还是异常的水&#xff08;S系列中国队的表现&#xff09;。 我今天并不是想追忆曾经的激情&#xff0c;而是想把…