http://gitbook.liuhui998.com/linux
1 touch file1 2 git init 3 echo "test1" >> file1 4 cat file1 5 git add /把文件修改添加到暂存区
6 git commit -m "test1" //把暂存区的全部内容提交到当前分支
7 git status 8 echo "test2" >> file1 9 git diff //没add以前查看不一样内容
10 git log --pretty=oneline //commit以后查看几回的提交备注-提交的ID
11 git reset --hard HEAD~ //回退到上一个版本test2
12 cat file1 13 git reset --hard 3628164 //返回到test3
14 git reflog //返回将来查看版本ID 15 //增长新的内容“sjb”
16 cat file1 17 git checkout -- file1 //工做区,取消修改,尚未add
18 git reset HEAD file1 //把暂存区的修改撤销掉,从新放回工做区 19 //git reset命令既能够回退版本,也能够把暂存区的修改回退到工做区
20 git checkout -- readme.txt //工做区,取消修改,尚未add
21 git reset --hard 3628164 //已经commit以后,撤销修改,直接版本回退 22 //(场景1:当你改乱了工做区某个文件的内容,想直接丢弃工做区的修改时,用命令git checkout -- file。
23 场景2:当你不但改乱了工做区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操做。 24 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节) 25 rm test //已经commit删除文件
26 git checkout -- test //撤销删除文件 27 //(git checkout实际上是用版本库里的版本替换工做区的版本,不管工做区是修改仍是删除,均可以“一键还原”。)
28 git remote add origin https://github.com/bell/testproject.git //与远程仓库关联
29 git push origin master //第一次是加参数-u的,仍是要从新输入用户名和密码,这个比较麻烦,怎么避免啊??
30 git clone git@github.com:michaelliao/gitskills.git //从远程库克隆
1 git checkout -b dev1 //建立并切换分支
2 git branch dev1 //建立分支
3 git checkout dev1 //切换分支
4 git push origin dev1 //能够远程到仓库,当前分支的名称
5 git branch //查看当前分支
6 git checkout dev //切换到dev
7 git merge dev1 //和当前分支dev合并
8 git branch -d <name> //删除分支
分支dev1 文件test修改git
分支featurel文件test也修改github
当合并分支的时候就会失败提示错误sql
查看test内容以下:Git用<<<<<<<
,=======
,>>>>>>>
标记出不一样分支的内容,咱们修改后保存ubuntu
打开文档手动修改以下内容:vim
而后add-commit-而后在合并git merge feature1windows
你能够试着输入git
,看看系统有没有安装Git:缓存
sudo apt-get install git服务器
安装的时候提示以下错误:Unable to locate packageapp
发现是由于新装的ubuntu系统,没有update的缘由。而后进行update,输入命令:sudo apt-get update
而后在安装Git就能够啦
apt-get,是一条linux命令,适用于deb包管理式的操做系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操做系统。
1 sudo apt-get install package 安装包 2
3 sudo apt-get install package - - reinstall 从新安装包 4
5 sudo apt-get -f install 修复安装"-f = ——fix-missing"
6
7 sudo apt-get remove package 删除包 8
9 sudo apt-get remove package - - purge 删除包,包括删除配置文件等 10
11 sudo apt-get update 更新源 12
13 sudo apt-get upgrade 更新已安装的包 14
15 sudo apt-get dist-upgrade 升级系统 16
17 sudo apt-get dselect-upgrade 使用 dselect 升级 18
19 apt-cache depends package 了解使用依赖 20
21 apt-cache rdepends package 是查看该包被哪些包依赖 22
23 sudo apt-get build-dep package 安装相关的编译环境 24
25 apt-get source package 下载该包的源代码 26
27 sudo apt-get clean && sudo apt-get autoclean 清理无用的包 28
29 sudo apt-get check 检查是否有损坏的依赖
从 https://git-for-windows.github.io下载直接安装
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个相似命令行窗口的东西,就说明Git安装成功!
安装完成后,还须要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
一、一种是从已有的Git仓库中clone (克隆,复制);
git clone https://github.com/xxxx/gitproject
二、还有一种是新建一个仓库,把未进行版本控制的文件进行版本控制。
git的基本流程以下:
git add
命令添加新建立或修改的文件到本地的缓存区(Index)git commit
命令提交到本地代码库git push
命令将本地代码库同步到远端代码库-m
添加本次修改的注释,完成后就会记录一个新的项目版本。13 git status //
命令可让咱们时刻掌握仓库当前的状态3、版本管理
一、修改内容
如今修改file的内容,追加test11
1 echo “test4” >> file3.txt
修改了内容以后,咱们须要查看此次和上次的不一样
1 git diff file3
二、版本回退
如今个人file1文件总共作了三次修改,以下,天天都是添加了一行
test1
test11
test123
在实际工做中,咱们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,否则要版本控制系统干什么。版本控制系统确定有某个命令能够告诉咱们历史记录,在Git中,咱们用git log
命令查看:
若是嫌输出信息太多,看得眼花缭乱的,能够试试加上--pretty=oneline
参数
如今咱们回退到上个版本,也就是add test11;使用git reset
命令
在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意个人提交ID和你的确定不同),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,固然往上100个版本写100个^
比较容易数不过来,因此写成HEAD~100
。
git log --pretty=oneline //查看提交日志,版本号
git reset --hard d9ca84997d59e //回退到这个版本号,前面几个字符串就能够,不用写全
cat file1 //查看文件的内容
其实此次修改了二个文件致使用git reset --hard HEAD^这个命令的时候报错,应该直接用版本号,以下
如今咱们在test11下面,咱们发现回退错了,想回到test123咋办呢?再次网上看找到版本号,回退回去(前提是咱们这个命令行窗口还木有关闭啊),又回去啦!!!!
如今,你回退到了某个版本,关掉了电脑,次日早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id
怎么办?
当你用$ git reset --hard HEAD^
回退到add distributed
版本时,再想恢复到append GPL
,就必须找到append GPL
的commit id。Git提供了一个命令git reflog
用来记录你的每一次命令:
小结:
HEAD
指向的版本就是当前版本,所以,Git容许咱们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
穿梭前,用git log
能够查看提交历史,以便肯定要回退到哪一个版本。
要重返将来,用git reflog
查看命令历史,以便肯定要回到将来的哪一个版本。
我以为嘛,暂存区就像购物车,没到付款的时候你都不肯定购物车里的东西所有都是要的。。。每拿一件商品就付一次款。。。那才麻烦大了
git diff #是工做区(work dict)和暂存区(stage)的比较
git diff --cached #是暂存区(stage)和分支(master)的比较
只有git add 放在缓存中才会提交;第一次修改 -> git add
-> 第二次修改 -> git add
-> git commit
三、撤销修改
当已经修改了文档时候:echo “7891” >> file1,尚未add
咱们用git status查看,会提示能够撤销修改的,git checkout ,如今返回到没有修改的
若是已经add了,咱们用git reset HEAD file
能够把暂存区的修改撤销掉(unstage)---回到工做区域,而后用git checkout撤回
如今,假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?还记得版本回退一节吗?能够回退到上一个版本。不过,这是有条件的,就是你尚未把本身的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?咱们后面会讲到远程版本库,一旦你把“stupid boss”提交推送到远程版本库,你就真的惨了……
git checkout -- file1 //file1前面刚开始没打空格死活不能撤销//命令中的很重要,没有,就变成了“切换到另外一个分支”的命令git checkout -- file----
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工做区的修改所有撤销,这里有两种状况:
一种是readme.txt
自修改后尚未被放到暂存区,如今,撤销修改就回到和版本库如出一辙的状态;
一种是readme.txt
已经添加到暂存区后,又做了修改,如今,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
git checkout -- file
。git reset HEAD file
,就回到了场景1,第二步按场景1操做。
四、删除文件
若是用rm test命令
删掉了,而且git commit——而后git checkout test恢复
由于使用了git rm test.txt
,是同时删除了工做区和暂存区test.txt
文件,而且将删除的动做提交到了暂存区。git checkout -- test.txt
表示从暂存区中把test.txt
拎出来,覆盖到工做区。可是,此时暂存区也已经没有了test.txt
,是没法还原覆盖到工做区的。
正确的作法是 git checkout HEAD -- d1.txt
或 git checkout HEAD d1.txt
3、远程仓库
先注册GitHub帐号。因为你的本地Git仓库和GitHub仓库之间的传输是经过SSH加密的,因此,须要一点设置
一、建立SSH Key
打开Shell(Windows下打开Git Bash),建立SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你须要把邮件地址换成你本身的邮件地址,而后一路回车,使用默认值便可
能够在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,能够放心地告诉任何人。
Windows的在C盘路径下
二、登录GitHub,打开“Account settings”,“SSH Keys”页面:
而后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
点“Add Key”,你就应该看到已经添加的Key
固然,GitHub容许你添加多个Key。假定你有若干电脑,你一下子在公司提交,一下子在家里提交,只要把每台电脑的Key都添加到GitHub,就能够在每台电脑上往GitHub推送了。
最后友情提示,在GitHub上免费托管的Git仓库,任何人均可以看到喔(但只有你本身才能改)。因此,不要把敏感信息放进去。
若是你不想让别人看到Git库,有两个办法,一个是交点保护费,让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另外一个办法是本身动手,搭一个Git服务器,由于是你本身的Git服务器,因此别人也是看不见的。这个方法咱们后面会讲到的,至关简单,公司内部开发必备。
4、添加远程仓库
一、首先,登录GitHub,而后,在右上角找到“Create a new repo”按钮,建立一个新的仓库: 在Repository name填入(注入英文,汉字能够输入,可是不显示名称),其余保持默认设置,点击“Create repository”按钮,就成功地建立了一个新的Git仓库:
二、咱们根据GitHub的提示,在本地的learngit
仓库下运行命令:
$ git remote add origin https://github.com/bell/testproject.git
把上面的bell
替换成你本身的GitHub帐户名,不然,你在本地关联的就是个人远程库,关联没有问题,可是你之后推送是推不上去的,由于你的SSH Key公钥不在个人帐户列表中。
添加后,远程库的名字就是origin
,这是Git默认的叫法,也能够改为别的,可是origin
这个名字一看就知道是远程库。
三、就能够把本地库的全部内容推送到远程库上:
git push -u origin master
因为远程库是空的,咱们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在之后的推送或者拉取时就能够简化命令。
推送成功后,能够马上在GitHub页面中看到远程库的内容已经和本地如出一辙:
四、从如今起,只要本地做了提交,就能够经过命令:
$ git push origin master //第一次是加参数-u的,仍是要从新输入用户名和密码,这个比较麻烦,怎么避免啊??
5、常见错误和异常
若是输入$ Git remote add origin git@github.com:djqiang(github账号名)/gitdemo(项目名).git
提示出错信息:fatal: remote origin already exists.
解决办法以下:
一、先输入$ git remote rm origin
二、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git就不会报错了!
三、若是输入$ git remote rm origin 仍是报错的话,error: Could not remove config section 'remote.origin'. 咱们须要修改gitconfig文件的内容
四、找到你的github的安装路径,个人是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8\etc
五、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行
删掉就行了!
若是输入$ ssh -T git@github.com
出现错误提示:Permission denied (publickey).由于新生成的key不能加入ssh就会致使链接不上github。
解决办法以下:
一、先输入$ ssh-agent,再输入$ ssh-add ~/.ssh/id_key,这样就能够了。
二、若是仍是不行的话,输入ssh-add ~/.ssh/id_key 命令后出现报错Could not open a connection to your authentication agent.解决方法是key用Git Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不须要再ssh-add命令加入了,其它的user,token等配置都用命令行来作。
三、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。
若是输入$ git push origin master
提示出错信息:error:failed to push som refs to .......
解决办法以下:
一、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来
二、再输入$ git push origin master
三、若是出现报错 fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal: Could not read from remote repository.
四、则须要从新输入$ git remote add origingit@github.com:djqiang/gitdemo.git
git push -f origin master.强制提交
输入中文:打开Git Bash后,对窗口右键->Options->Text->Locale改成zh_CN,Character set改成UTF-8
6、从远程库克隆
假设咱们从零开发,那么最好的方式是先建立远程库,而后,从远程库克隆。
一、首先,登录GitHub,建立一个新的仓库,名字叫testproject
二、咱们勾选Initialize this repository with a README
,这样GitHub会自动为咱们建立一个README.md
文件。建立完毕后,能够看到README.md
文件。
三、如今,远程库已经准备好了,下一步是用命令git clone
克隆一个本地库
$ git clone git@github.com:bell/testproject.git
或是https://github.com/bell/testproject.git
Cloning into 'gitmstsc'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd testproject
$ ls
README.md
注意把Git库的地址换成你本身的,而后进入testproject
目录看看,已经有README.md
文件了。
要克隆一个仓库,首先必须知道仓库的地址,而后使用git clone
命令克隆。
Git支持多种协议,包括https
,但经过ssh
支持的原生git
协议速度最快。
7、分支管理
(妈呀 终于到分支管理了,上面的学习也花费了一些时间,这是第二次学习了。。。。。下午了,比较累)
一、建立合并分支
1 git checkout -b dev 2 Switched to a new branch 'dev'//git checkout命令加上-b参数表示建立并切换 3 git branch //列出全部分支,当前分支前面会标一个*号 4 touch branch 5 git add branch 6 git commit -m "branch test" 7 git checkout master//切换分支
8 git merge div //合并到当前分支
查看分支:git branch
建立分支:git branch <name>
切换分支:git checkout <name>
建立+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>