内容乱码是文件内容编码问题,可以直接修改文件编码格式
文件名乱码或提示版本说明中文乱码问题,可以修改配置文件支持中文编码
1.Git 的诞生:
Git 是什么?
Git 是目前世界上最先进的分布式版本控制系统(没有之一)。
2.Git历史:
在 2005 年就被打破了,原因是 Linux 社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发 Samba 的 Andrew 试图破解 BitKeeper 的协议(这么干的其实也不只他一个),被 BitMover 公 司发现了(监控工作做得不错!),于是 BitMover 公司怒了,要收回 Linux 社区的免费使用权。
Linus 可以向 BitMover 公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是 这样的:
Linus 花了两周时间自己用 C 写了一个分布式版本控制系统,这就是 Git!一个月之内, Linux 系统的源码已经由 Git 管理了!牛是怎么定义的呢?大家可以体会一下。
Git 迅速成为最流行的分布式版本控制系统,尤其是 2008 年,GitHub 网站上线了,它为开源项目 免费提供 Git 存储,无数开源项目开始迁移至 GitHub,包括 jQuery,PHP,Ruby 等等。
3.集中式 vs 分布式:
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所 以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。 中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完 了,再放回图书馆。
缺点:就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个 10M 的文件就需要 5 分钟,
4.分布式版本控制系统与集中式版本控制系统有何不同:
首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样 ,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完 整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件 A,你的同事也在他的电脑上改 了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了
5.分布式版本控制系统和集中式版本控制系统相比:(优点)
分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉 了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题 ,所有人都没法干活了。
6.Git安装(windows):
在 Windows 上安装 Git
msysgit 是 Windows 版的 Git,从 http://msysgit.github.io/ 下载,然后按默认选项安装即 可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明 Git 安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为 Git 是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和 Email 地址。你也 许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众, 其次,真的有冒充的也是有办法可查的。
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的 Git 仓库都会使用 这个配置,当然也可以对某个仓库指定不同的用户名和 Email 地址。
7.创建Git仓库
一:初始化版本库:-git init
二:添加文件到缓存区:-git add --添加所有文件 是:加个点-列:git add .
三:查看仓库状态:-git status
四:添加到本地仓库:-git commit
命令行:
pwd:显示当前目录---
ll:显示改目录下的文件----
cd ..:返回上一级
ls:查看当前目录下的所有文件
mkdir :创建目录
ls -a:查看隐藏和不隐藏的文件
cd :切换目录
echo "one rep02" >> test.txt:向test文本文件添加one rep02内容
cat test.txt:展示文本文件内容
git add [文件名]:
Ctrl+d:退出当前命令行
添加至暂存区
git commit -m "这里写每次提交得而说明" :提交命令
git status :查看当前仓库的状态
git分支管理
Git branch UserA:创建UserA分支
Git checkout UserA :切换分支
合并分支
git merge [分支名称]
删除分支
git branch -d [分支名称]
图形化操作:(Source Tree应用)
8.仓库状态
成功地添加并提交了一个 readme.txt 文件,现在,是时候继续工作了,于是,我们继续修改 readme.txt 文件
git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt 被修改过 了,但还没有准备提交的修改
虽然 Git 告诉我们 readme.txt 被修改了,但如果能看看具体修改了什么内容,自然是很好的。比 如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的 readme.txt,所以,需要用 git diff这个命令看看:
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
9.版本回退
git log:查看提交版本
git log --pretty=oneline:
一个 SHA1 计算出来的一个非常大的数字,用十六进制表示,而且你看到的 commit id 和 我的肯定不一样,以你自己的为准。为什么 commit id 需要用这么一大串数字表示呢?因 为 Git 是分布式的版本控制系统
git reset --hard head^:返回上一个版本:HEAD 表示当前版本,也就是最新的提交
上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上 100 个版本写 100 个^比较 容易数不过来,所以写成 HEAD~100
git reset --hard 3628164:返回原来返回的版本:3628164:版本号
找不到新版本的 commit id 怎么办?
Git 提供了一个命令git reflog用来记录你的每一次命令
版本回退后:更新到远程仓库:git push -f -u origin master
10.工作区和暂存区
工作区:就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库
Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index) 的暂存区,还有 Git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD。
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以 一次性把暂存区的所有修改提交到分支。
11.管理修改
每次修改,如果不 add 到暂存区,那就不会加入到 commit 中。
12.撤销修改
命令git checkout -- readme.txt意思就是,把 readme.txt 文件在工作区的修改全部撤销:这 里有两种情况:
一种是 readme.txt 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模 一样的状态;(满足第一种情况:git checkout -- readme.txt)
二种是 readme.txt 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂 存区后的状态。
git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。
git reset HEAD (文件名)可以把暂存区的修改撤销掉(unstage),重新放回工作区
git checkout -- readme.txt:丢弃工作区的修改
13.删除文件
rm test.txt:删除文件
在工作区内删除文件:用rm+文件名
在版本库中删除文件:一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit -m "remove test.txt"
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
git checkout -- test.txt(测试错误)
生成 SSH key
需要创建一个github账户
ssh-keygen -t rsa -C "邮箱号":生成公钥和密钥
在命令行中执行、完成后在本地电脑用户里查看.ssh的文件
1.命令行:git push -u origin master:把当前分支的内容推送到github上去
关联后,使用命令git push -u origin master第一次推送 master 分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin (master)是可以更改的,代表当前需要提交的分支,推送最新修改;
2.sourceTree图形化推送
Github上:
登陆 GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库:
在 Repository name 填入 learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的 Git 仓库:
下面会自动生成推送方式进行推送:
GitHub 告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到 GitHub 仓库。
本地souceTree操作:
在本地仓库的mastr分支上拉取请求:
在点击之后:出现各项设置
在图形界面上出行一下表示成功
在mastr上进行推送到远程仓库上
推送完成则在github网页上直接刷新出现推送目标
git clone git@github.com:michaelliao/gitskills.git
git@github.com:michaelliao/gitskills.git:该值是仓库地址
现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git 支持多种协议,包括 https,但通过 ssh 支持的原生 git 协议速度最快。
16、git分支管理
Git branch UserA:创建UserA分支
Git checkout UserA :切换分支
合并分支
git merge [分支名称]
删除分支
git branch -d [分支名称]
原文:https://www.cnblogs.com/yhm9/p/11626143.html