Git基本操做

 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

 

1、安装

一、在Linux上安装Git(Ubuntu)

你能够试着输入git,看看系统有没有安装Git:缓存

sudo apt-get install git服务器

安装的时候提示以下错误:Unable to locate packageapp

发现是由于新装的ubuntu系统,没有update的缘由。而后进行update,输入命令:sudo apt-get update

而后在安装Git就能够啦

apt-get,是一条linux命令,适用于deb包管理式的操做系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操做系统。

apt-get命令通常须要root权限执行,因此通常跟着sudo命令。
例:sudo apt-get xxxx
 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 检查是否有损坏的依赖

二、在Windows上安装Git

从 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"

2、得到一个Git仓库

一、一种是从已有的Git仓库中clone (克隆,复制);

 git clone https://github.com/xxxx/gitproject

 

二、还有一种是新建一个仓库,把未进行版本控制的文件进行版本控制。

  

三、正常的工做流程

git的基本流程以下:

  • 建立或修改文件

  • 使用git add命令添加新建立或修改的文件到本地的缓存区(Index)

  • 使用git commit命令提交到本地代码库

  • (可选,有的时候并无能够同步的远端代码库)使用git push命令将本地代码库同步到远端代码库

1 cd F:\git_doc

2 mkdir testproject //新建一个目录

3 cd testproject //打开这个项目

4 git init //初始化

5 ls -la //发如今此目录下存在.git的目录,意味着一个仓库初始化了

6 touch file1.txt file2.txt file3.txt //建立三个文件

7 vim file1.txt //写入内容

8 或是追加echo “test1” >> file1.txt //直接追加内容(三个文件都写入)

9 git add file1.txt file2 file3 //用git add命令把文件添加到缓存区

10 git commit -m “add 3 files”//把暂存区的全部内容提交到当前分支使用-m添加本次修改的注释,完成后就会记录一个新的项目版本。

11 git remote add origin git@github.com:defnngj/MyGit.git  //链接到远程GitHub项目

12 git push origin master //将本地仓库同步到远端服务器,输入用户名和密码

13 git status            //命令可让咱们时刻掌握仓库当前的状态

    add的时候在win下提示“warning: CRLF will be replaced by LF in GeneSmartStay/res/values-zh-rTW/strings.xml.The file will have its original line endings in your working directory.”这是由于:文件中换行符的差异致使的。这个提示的意思是说:会把windows格式(CRLF)转换成Unix格式(LF),这些是转换文件格式的警告,不影响使用。

3、版本管理

一、修改内容

如今修改file的内容,追加test11

1 echo “test4” >> file3.txt 

修改了内容以后,咱们须要查看此次和上次的不一样

1 git diff file3

而后依旧是git add 和git commit

二、版本回退

如今个人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 commitgit add时的状态。

 

小结

  • 场景1:当你改乱了工做区某个文件的内容,想直接丢弃工做区的修改时,用命令git checkout -- file
  • 场景2:当你不但改乱了工做区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操做。
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

 

四、删除文件

若是用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.txtgit 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_rsaid_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>

相关文章
相关标签/搜索