Git教程总结

参考文章:https://www.liaoxuefeng.com/wiki/896043488029600

类型:

分布式版本控制系统

集中式版本控制系统:

版本库集中存放在中央服务器,工作时,首先要从中央服务器获取最新的版本,再把自己的东西推送给中央服务器.

缺点:

联网

实际应用软件:

svn(开源,免费)

ClearCase(收费)

vss(不好用)

分布式版本控制系统:

没有中央服务器,每个人电脑上都是一个完整的版本库,多人协作时,只需把自己的修改推送给对方,就可以互相看到对方的修改了.在实际使用分布式版本控制系统的时候,很少在两人之间的电脑上推送版本库的修改,因为可能两人并不在一个局域网内,两台电脑互相访问不了,也可能对方的电脑根本没有开机,所以,分布式版本控制系统通常也有一台充当’中央服务器’的电脑,但这个服务器的作用仅仅是用来方便'交换’大家的修改,没有它大家也一样可以完成工作,只是交换修改不方便而已

优点:

安全性较高,不需要联网

实际应用软件:

git(快速,简单,流行)

BitKeeper(促使git诞生)

Mercurial(类似git)

Bazaar(类似git)

环境:

Linux,Unix,Mac,Windows

安装:

Mac OS:

homebrew安装法

xcode中继承了git,但没有安装,需要在xcode偏好设置里找到Downloads,选择Command Line Tools,install

Windows:

git官网下载,默认选项安装,开始菜单找到git->git bash,如果弹出命令行窗口,安装成功.

完成后,需要在命令行中输入:

$ git config —global user.name “your name”

$ git config —global user.email “email@example.com”

填写自己的用户名和邮箱

--global表示这台机器上的所有git仓库都会使用这个配置

版本库:

又名仓库,简单理解成一个目录,这个目录所有文件都可以被git管理起来,每个文件的修改,删除,git都能跟踪

创建版本库:


创建learngit空目录

进入到空目录中

获取绝对路径

将空目录变成git可以管理的仓库:

注:如果没有看到.git目录,则这个目录默认是隐藏的,使用ls -ah可以看见

将文件添加到版本库

注:所有的版本控制系统,只能跟踪文本文件的改动,例如txt文件,网页,所有的程序代码等.图片,视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只知道图片从100kb改成了120kb,但具体的变化,版本控制系统不知道,所以,如果要真正使用版本控制系统,就要以纯文本方式编写文件,建议使用标准的UTF-8编码.windows系统注意:不要使用windows自带的记事本编辑任何文本文件,建议使用notepad++代替记事本(notepad++默认编码设置为UTF-8 without bom).

改动但没有提交:

回退版本:

head表示当前版本(一个指向当前版本的指针)

head^:上一个版本

head^^:上上个版本

head~100:回退到前100个版本

基本语句:

Git reset —hard head^

查看git日志(查看版本号):

git log

指定版本号进行回退:

Git reset —hard 版本号

保存记录每一次命令:

Git reflog

工作区(Working Directory):

在电脑里能看到的目录,例如learngit

版本库(Repository):

工作区有一个隐藏目录.git,并不属于工作区,而是git的版本库

暂存区(stage)

HEAD:

Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD

Git add:实际上把要提交的所有修改放到暂存区

git commit:一次性把暂存区的所有修改提交到分支

撤销修改:

Git checkout —文件名(包括后缀)

两种情况:

1.txt文件修改后还没有放到暂存区,撤销修改后就回到和版本库一模一样的状态

2.txt文件修改后add到了暂存区,然后又做了修改,这时候撤销修改就回到了存放到暂存区后的状态

总的来说,撤销修改就是让文件回到最近一次git commit或git add时的状态

将暂存区的修改撤销掉:

Git reset HEAD 文件名

手动删除文件并从从版本库中删除文件:

git rm 文件名

git commit

将误删的文件恢复到最新版本:

git checkout —文件名

远程仓库:

github作为git的远程仓库

本地git仓库和github仓库间的传输通过ssh加密

创建ssh key:

1.如果有.ssh->id_rsa(私钥)和id_rsa.pub(公钥),可以直接跳到下一步(command+shift+.可以查看隐藏文件)

2.没有,终端打开,创建ssh key(windows打开git bash):

ssh-keygen -t rsa -C “你的邮箱”

接下来只需要使用默认值即可

add key:

登录github->Account settings->ssh keys->add ssh key->填上任意title,在文本框里粘贴id_rsa.pub文件的内容

为什么github需要ssh key?

github需要识别推送的提交确实是本人推送的,只有知道了公钥,就可以确认只有自己才能推送

github作用:

在本地新建一个git仓库后,在github也新建一个git仓库,这两个仓库之间可以进行远程同步,这样github仓库可以作为备份,也可以让其他人通过该仓库来协作.

将本地仓库与github仓库同步,并且将分支推送到github上

推送时所需要的用户名和密码:

shiguoqian

pineapple1310204

从远程库克隆:

Git clone git@github.com:shiguoqian/gitskills.

分支管理:

master:指向最新的提交,master分支是主分支

HEAD:指向master,即HEAD指向的就是当前分支

Dev:创建的新的分支,HEAD指向它,代表当前分支在dev上

新的提交后,就知识针对dev分支了,而master指针不变

当我们完成了dev分支上的工作后,可以把dev合并到master上,即让master指向dev的当前提交

合并完成后,可以把无用的dev分支删掉,即将dev指针删掉(使用fast forward模式可以在合并完成后删除无用的分支)

创建dev分支并切换到当前分支:

Git checkout -b dev

-b:创建并切换分支(branch+checkout)

查看当前分支:

Git branch(列出所有分支,*表示当前分支)

Dev分支完成后,切换到master分支:

git checkout master

删除dev分支:

git branch -d dev

合并分支:

Git checkout master

Git merge -no-ff -m “提交时的message” dev(禁止使用fast forward,合并完成后不删除原来的分支)

错误分支:

当接到一个修复错误的任务时,需要建立一个分支进行修复,但如果自己手头的分支工作还未完成,就不能提交,也就不能进行修复错误工作,这时就可以通过stash功能,把当前工作现场'储存起来’,等到错误修复后,恢复现场继续工作

保存现场:

git stash

查看保存的现场:

git stash list

恢复现场:

git stash apply(恢复但并不删除stash中存储的)

git stash drop(删除存储的)

git stash pop(恢复并删除stash中存储的)

Feature分支:

开发一个新功能,使用feature分支,当不需要改功能时,可以随时删除该分支(未合并前删除,需要进行强制删除-D)

Git branch -D 分支名

多人协作:

远程仓库默认名称origin

当你从远程仓库克隆时,实际上git是自动把本地的master分支和远程的master分支对应起来了

查看远程库的信息:

git remote

查看更详细的信息:

git remote -v(可以抓取推送的origin的地址)

推送分支(把该分支上的所有本地提交推送到远程库):

git push 远程仓库名 分支名

master分支是主分支,要时刻与远程同步

Dev分支是开发分支,也需要远程同步

bug分支只用于在本地修复bug,没必要推送到远程

feature分支是否推送取决于是否在上面合作开发

在远程仓库中的dev分支开始开发:

Git checkout -b dev origin/dev(将github上的dev同步到本地仓库)

修改后将dev分支推送到远程仓库:

git commit -m “添加dev分支信息”

如果同时多人对dev分支进行修改,必定会产生冲突,解决方法:

git pull(前提是当前所在分支就是dev)将最新的dev分支从origin/dev抓下来,本地合并,解决冲突后再重新推送

如果git pull失败,原因是没有指定本地dev分支与远程origin/dev分支的链接,设置origin/dev和本地dev链接:

git branch —set-upstream-to=origin/dev dev(创建分支链接)

将本地为push的分叉提交历史整理成直线:

git rebase(使查看历史提交的变化时更容易)

标签管理:(不按时间顺序列出,而是按字母排序)

每发布一个版本时,通常在版本库中打一个标签(tag),唯一确定了打标签时刻的版本,无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来,标签也是某个历史版本的别名

git的标签是指向某个commit的指针(分支可以移动,标签不能移动),创建和删除标签都是瞬间完成的,但是因为commit号杂乱难记,所以用一个和commit绑定的标签进行使用

创建标签:(为某个分支打上标签,实际上当该分支提交后,tag标签就指向了该commit)

git tag v1.0(在当前分支上打标签)

创建标签并指定标签信息:

git tag -a 标签名 -m “message"

查看所有标签:

git tag

为某个提交打标签:

git tag v0.9 commit号

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

删除本地仓库标签:

git tag -d 标签名

创建的标签只存储在本地,不会自动推送到远程

将标签推送到远程:

git push origin 标签名

删除远程仓库标签:

git push origin:refs/tags/标签名

自定义git:

让git显示颜色:

git config —global color.ui true

忽略特殊文件:

有时候,必须要把某些文件放到git工作目录中,但又不能提交他们,可以让git忽略某些特殊文件,从而不会每次都提示:

https://github.com/github/gitignore

编写完.gitignore文件后也要将其提交到git中,以便生效

配置别名:

让命令更加简洁容易记住:

git config —global alias.st status

这样,就可以用st替代status单词了

git status == git st

每个仓库的git配置文件都放在.git/config文件中

输入q退出显示界面

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 安装Git Git的下载地址:Git官网下载地址 Git本地仓库和命令 配置用户 下载完Git后,右键会有一个Gi...
    TokyoZ阅读 9,963评论 1 7
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 14,650评论 9 163
  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 9,379评论 3 27
  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 5,921评论 1 8
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 5,283评论 0 7