• Git基本操作


     http://gitbook.liuhui998.com/

     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修改

    分支featurel文件test也修改

    当合并分支的时候就会失败提示错误

    查看test内容如下:Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改后保存

    打开文档手动修改如下内容:

    然后add-commit-然后在合并git merge feature1

    一、安装

    1、在Linux上安装Git(Ubuntu)

    你可以试着输入git,看看系统有没有安装Git:

    sudo apt-get install git

    安装的时候提示如下错误:Unable to locate package

    发现是因为新装的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 检查是否有损坏的依赖

    2、在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"

    二、获得一个Git仓库

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

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

     

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

      

    3、正常的工作流程

    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),这些是转换文件格式的警告,不影响使用。

    三、版本管理

    1、修改内容

    现在修改file的内容,追加test11

    1 echo “test4” >> file3.txt 

    修改了内容之后,我们需要查看这次和上次的不同

    1 git diff file3

    然后依旧是git add 和git commit

    2、版本回退

    现在我的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

    3、撤销修改

    当已经修改了文档时候: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:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

    4、删除文件

    如果用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

           

    三、远程仓库

    先注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置

    1、创建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盘路径下

    2、登陆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服务器,所以别人也是看不见的。这个方法我们后面会讲到的,相当简单,公司内部开发必备。

    四、添加远程仓库

    1、首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库: 在Repository name填入(注入英文,汉字可以输入,但是不显示名称),其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:

     

     

     

    2、我们根据GitHub的提示,在本地的learngit仓库下运行命令:

    $  git remote add origin https://github.com/bell/testproject.git 

    把上面的bell替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。

    添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

    3、就可以把本地库的所有内容推送到远程库上:

    git push -u origin master

    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

    推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:

    4、从现在起,只要本地作了提交,就可以通过命令:

    $ git push origin master   //第一次是加参数-u的,还是要重新输入用户名和密码,这个比较麻烦,怎么避免啊??

    五、常见错误和异常

        如果输入$ Git remote add origin git@github.com:djqiang(github帐号名)/gitdemo(项目名).git 

        提示出错信息:fatal: remote origin already exists.

        解决办法如下:

        1、先输入$ git remote rm origin

        2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git就不会报错了!

        3、如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section 'remote.origin'. 我们需要修改gitconfig文件的内容

        4、找到你的github的安装路径,我的是C:UsersASUSAppDataLocalGitHubPortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8etc

        5、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行删掉就好了!

        如果输入$ ssh -T git@github.com
        出现错误提示:Permission denied (publickey).因为新生成的key不能加入ssh就会导致连接不上github。

        解决办法如下:

        1、先输入$ ssh-agent,再输入$ ssh-add ~/.ssh/id_key,这样就可以了。

        2、如果还是不行的话,输入ssh-add ~/.ssh/id_key 命令后出现报错Could not open a connection to your authentication agent.解决方法是key用Git Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行来做。

        3、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。

     

        如果输入$ git push origin master

        提示出错信息:error:failed to push som refs to .......

        解决办法如下:

        1、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来

        2、再输入$ git push origin master

        3、如果出现报错 fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal: Could not read from remote repository.

        4、则需要重新输入$ 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

     六、从远程库克隆

    假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

    1、首先,登陆GitHub,创建一个新的仓库,名字叫testproject

    2、我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件。

    3、现在,远程库已经准备好了,下一步是用命令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协议速度最快。

    七、分支管理

     (妈呀  终于到分支管理了,上面的学习也花费了一些时间,这是第二次学习了。。。。。下午了,比较累)

    1、创建合并分支

    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>

  • 相关阅读:
    linux之卸载软件
    linux之挂载硬盘
    windows MySQL 5+ 服务手动安装
    深刻理解Python中的元类(metaclass)
    Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
    WSGI、flup、fastcgi、web.py的关系
    Windows下python环境变量配置
    External file changes sync may be slow: Project files cannot be watched (are they under network mount?)
    as。 对象和数组
    为什么for不能有序遍历数组的所有元素?(Array的设计原理)
  • 原文地址:https://www.cnblogs.com/bell1991/p/7091152.html
Copyright © 2020-2023  润新知