Git 学习记录,详细

Git 有关网站
托管: GithubBitbucket码云Coding
使用教程: 廖雪峰 Git 教程

常用命令

常用命令
git log --pretty=online --abbrev-commit     查看历史提交的commit id
ssh-keygen -t rsa -C "邮箱地址"               生成秘钥,并绑定自己的邮箱
git diff HEAD -- 文件名                      查看工作区与版本库最新版本的区别    
git init                                    将目录变成版本库
git config user.name                        设置Git用户名
git config user.email                       设置Git邮箱
ls -ah                                      查看隐藏文件
vi / touch                                  新建文件
git add 文件名                               将文件添加到暂存区
git add -f a.class                          强制添加文件到暂存区
git commit -m '提示语'                       将文件提交到版本库
git status                                  查看仓库状态
git diff 文件名                              查看具体修改内容
git reset --hard HEAD^                      返回以前版本,有几个^就返回几个版本
git reset --hard HEAD~数字                   返回以前指定几个版本
git reset --hard 版本号                      返回指定版本
git reflog                                  记录每一次命令

版本库
(origin默认为远程版本库名称,master为分支名)
git checkout -- 文件名                      丢弃对工作区的修改或将删除的文件恢复
git reset HEAD 文件名                       把暂存区的修改退回到工作区
rm 文件名                                   删除工作区中的文件
git rm 文件名                               删除版本库中的文件
git pull origin master                     将远程版本库拉到本地自动合并
git fetch origin 分支名                     将远程版本库拉到本地不合并
git push -u origin master                  将本地版本库提交到远程版本库
git remote rm origin                       将版本库删除
git clone [email protected]:wwc/fight.git     将远程版本库克隆到本地

分支
git branch                                 查看分支
git branch -a                              查看分支包括远程分支
git branch dev(分支名称)                    创建分支
git checkout dev                           切换分支
git branch -b dev(分支名称)                 创建并切换分支
git branch --set-upstream 分支名称 origin/分支名称    指定本地分支与远程分支的链接(pull失败时使用)
git checkout -b dev(分支名称) origin/dev    创建远程origin的dev分支到本地  
git merge 分支名称                          合并分支
git branch -d 分支名称                      删除分支
git branch -D 分支名称                      强行删除分支
git merge --nn--ff '提示信息'dev(分支名称)   强制关闭Fast forward使用方式 
git stash                                  将当前分支工作区"保存"起来
git stash list                             查看保存的分支信息
git stash apply (stash号)                  恢复保存的分支(不删除stash信息)
git stash pop (stash号)                    恢复保存的分支(删除stash信息)

远程库
git remote                                 查看远程库信息
git remote -v                              查看远程库详细信息

标签
git tag                                    查看标签
git show 标签名                             查看标签信息 
git tag 标签名                              创建标签
git tag 标签名 commit id                    对某个提交创建标签
git tag -a 标签名 -m '说明' commit id        对标签进行说明
git tag -s 标签名 -m'说明' commit id         通过-s用密钥来创建一个标签
git tag -d 标签名                           删除一个标签
git push origin 标签名                      将标签推送到远程
git push origin --tags                     一次性将本地所有标签推送到远程
git push origin :refs/tags/标签名           删除一个远程标签(最好先将本地删除)
git check -ignore -v 文件名                 检查.gitignore文件中,该文件类型的忽略信息

git show                                    查看当前提交的版本信息
git show [version]                          查看指定快照的版本信息
git show (tag)                              查看指定tag的版本信息
git remote show                             查看远程仓库信息
git remote show [alias]                     查看某个远程仓库的信息,[alias]为远程仓库的别名

git log                                     查看从近到远提交日志
git log -p                                  展开每次提交内容差异
git log --graph                             (try it)
git log --pretty                            以各种格式显示log
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset--abbrev-commit                             每个版本文件清单,指定日期,作者等(想得到的基本都能做到)

git remote 罗列、添加和删除远端仓库别名
    例:git remote    列出远端分支
      origin
      git remote -v
      origin  git@localhost:test.git (fetch)
      origin  git@localhost:test.git (push)

      git remote add  为你的项目添加一个新的远端仓库
      git remote add origin git@localhost:test.git

      git remote rm   删除现有的某个别名
      git remote rm origin



Git 安装及配置

  1. 安装

Windows 安装

下载并安装 GitBash 下载
下载并安装 TortoiseGit,先安装语言包,再安装软件包 下载

CentOs 安装

yum -y install git
  1. 配置
  1. 输入命令 pwd,先查看用户目录
  2. 输入命令 (会在 ~ 目录中生成 .ssh 目录)
ssh-keygen -t rsa -C "邮箱地址"` 
Enter file in which to save the key (/Users/wangweichen/.ssh/id_rsa): 按回车
Enter passphrase (empty for no passphrase):  输入密码
完成后,生成 ~/.ssh 目录,得到 id_rsa与id_rsa.pub文件,id_rsa为密钥,id_rsa.pub为公钥
  1. 配置用户信息

设置用户名、Email和在GitHub中创建访问令牌(API token)
git config --global user.name 'zhangsan'
git config --global user.email '[email protected]'

  1. 生成SSH密钥,以及在GitHub上绑定用户密钥

因为GitHub需要识别出是你推送的,所以GitHub知道你的公钥才可以推送。


打开github官网(Github),注册 -> 创建自己的账户(wwc) -> 登录,点击头像 -> settings -> SSH and GPG keys -> New SSH key -> Title起个名 -> key 的内容,将 id_rsa.pub 文件中的公钥复制添加到这里

  1. 测试连接

测试连接是否成功,输入 ssh -T [email protected]
如果提示 Hi 用户名称 You’ve successfully authenticated,but GitHub does not provide shell access. 说明连接成功’


克隆

将本地文件添加到远程

1.创建版本库
    一、添加远程仓库
          回首页->newrepository->输入Repository name(yjg)->Create repository
    二、在本地新建仓库
	      a. 选择合适目录
	              mkdir test
	              cd test
	        b. 使用 `git init` 命令将这个目录变成可管理的仓库,会生成一个隐藏文件夹(.git),使用ls -ah可查看隐藏文件
	        		成功创建Git版本库(git init)后,Git会自动创建第一个分支(master)以及指向master的HEAD指针
	        c. 创建一个read.txt文件    vi read.txt 或 touch read.txt    touch会创建一个不存在的文件
	        d. 在read.txt中添加内容    vi read.txt 
	        e. 将文件添加到缓存    git add read.txt
	        f.  将文件提交到仓库    git commit -m '1提交read.txt'
	        g. git remote add origin [email protected]:wwc/yjg.git        连接远程yjg仓库   
	            git  push -u origin master        提交本地版本库到远程版本库    (在GitHub上成功看到自己提交的readme.txt文件)
	            可能出现的错误:
	                1:在执行 git remote add origin [email protected]:wwc/yjg.git 
	                    错误提示:fatal: remote origin already exists.
	                    解决方法:git remote rm origin
	                2:在执行 git push -u origin master
	                    错误提示:error:failed to push som refs to..........
	                    解决方法:git pull origin master    //先把远程版本库拉下来合并,再提交,如果合并冲突,解决冲突后提交

从远程克隆

    一、添加远程版本库
       回首页->newrepository->输入Repository name(fight)->勾选Initialize ... README(自动创建README.md文件)->Create
    二、克隆远程版本库到本地
       git clone [email protected]:版本库地址

版本管理

版本回退

1. git log 命令显示从近到远的提交日志    参数:--pretty=oneline 
2. 退回以前版本 `git reset --hard HEAD^` 或者 `git reset --hard HEAD~` 数字
    说明:HEAD 表示当前版本,HEAD^ 表示上一版本, HEAD^^ 表示上上版本,以此类推
    注意:当退回以前版本时,用 git log 查看,会发现最新版本会消失,如果想恢复到最新版本,只要命令窗口未关闭,并且用git log查看过,就可以通过 git reset --hard 版本号追回,版本号可以用前几位,GIT会自动去找,如果已经关闭命令窗口,没关系,GIT 提供 `git reflog` 来记录你的每一次命令,就可以看到版本号了

撤销修改

    分四种情况
    (1)    还未添加到暂存区
            丢弃(撤销)对工作区的修改:    git checkout -- 文件名
    (2)    已添加到暂存区,未提交到版本库
            把暂存区的修改退回到工作区    git reset HEAD 文件名
    (3)    已提交到版本库,未推送到生产版本库
            使用3.版本管理->二、版本回退    退回上一版本
    (4)    已推送到生产版本库
             已写好'辞职申请'

删除文件

    分两种情况
    (1)    在工作区中删除
            使用 rm 文件名
            恢复:git checkout --文件名    其实就是将版本库中的版本替换工作区中的版本
    (2)    在暂存区删除
            git rm 文件名

分支

   一、查看分支
        git branch         查看分支
          git branch -a     查看分支包括远程分支
    二、创建、合并和删除分支
        git branch dev(分支名称)    创建分支
        git checkout dev                 切换分支
        或者直接使用    git checkbou -b dev(分支名称)    自动创建并切换到dev分支
        git merge 分支名称              合并分支
        git branch -d 分支名称          删除分支
        git branch -D 分支名称          强行删除分支
    在新建分支后对文件进行修改,但是不想合并,在删除分支时会提示未合并,可以使用强行删除分支
    如果你新建了一个分支dev,并在该分支中修改了文件,切换到master分支中是看不到在dev分支修改的内容的,所以要合并
 三、解决冲突
    如何产生:
        例:你在dev分支下对1.php文件做了修改,并提交到本地版本库,又切换到master分支对1.php做了修改,将这两个分支合并
               时会发生错误
$ git merge feature1
                     Auto-merging readme.txt
                     CONFLICT (content): Merge conflict in readme.txt
                     Automatic merge failed; fix conflicts andthen commit the result.
            打开1.php文件会发现多了
            <<<<<<<<<HEAD
            Creating a new....
            =========和
            Creating a new....
            >>>>>>>>>dev
            将这些删掉保存再提交,就可以了
 四、分支管理
        合并时,Git会使用 Fast forward模式,在这种模式下,删除分支时会丢掉分支信息,如果在合并时,强制关闭该模式,Git在提
        交时会生成一个新的commit,就可以看到分支信息,以及合并内容
        git merge --nn--ff '提示信息'dev(分支名称)         强制关闭Fast forward使用方式  
        一般在开发过程中是不在master分支上进行开发,每个成员都会有新建一个分支,当对文件进行修改后,再合并到master分支
        上,如果出现冲突,使用强制关闭Fast forward模式,方便以后查看合并信息
  五、Bug分支
        使用场景:当在开发过程中,接到一个需要修复的bug,但是在当前分支上(dev)的工作还没有提交,但是当前工作还未完成
        这时就需要将当前工作"保存"起来,修复完bug后再回来工作
        git stash    将当前分支工作区"保存"起来
        先要确定在哪个分支上修复bug,比如在master分支上修复,就从master分支上创建临时分支(我认为就是新建一个分支)
        git checkout master
        git checkout -b new-bug1(分支名称)
        修复完后,与master合并(强制关闭Fast forward模式)->提交->删除new-bug1分支
        这时就需要回到dev分支进行开发,但是"保存"在哪里了,
        git stash list         查看保存的分支信息
    stash@{0}: WIP on dev: 6224937 add merge
        git stash apply (stash号)    恢复保存的分支(不删除stash信息)
        git stash pop (stash号)       恢复保存的分支(删除stash信息)
        可以多次git stash,在恢复时,用git stash list 查看,恢复指定的stash

  六、多人协作
        从远程库clone到本地时,只能看到master分支,但是要在dev分支上开发,这时就要从远程将dev分支拉下来创建本地dev分支
        git checkout -b dev origin/dev        从远程将dev分支拉下来创建本地dev分支
        ,在将文件修改push到远程后,另外一名伙伴的最近提交与你的推送有冲突,这时就需要解决冲突,先用git pull 拉下来,在本地合并,再push
        但pull也可能失败,因为没有指定本地dev分支与远程dev分支的链接,根据提示,指定链接
        git branch --set -upstream dev origin/dev        指定本地dev分支与远程dev分支的链接

标签管理

        git tag                                    查看标签
        git show 标签名                     查看标签信息 
        git tag 标签名                        创建标签
        git tag 标签名 commit id      对某个提交创建标签
        git tag -a 标签名 -m '说明' commit id         对标签进行说明
        git tag -s 标签名 -m'说明' commit id           通过-s用密钥来创建一个标签
        用密钥创建,签名采用PGP签名,因此,必须安装gpg(GnuPG),如果没有打到gpg或没有gpg密钥对,就会报错。如报错,借助GnuPG文档配置Key.
        git tag -d 标签名                    删除一个标签
        git push origin 标签名           将标签推送到远程
        git push origin --tags            一次性将本地所有标签推送到远程
        git push origin :refs/tags/标签名    删除一个远程标签(最好先将本地删除)

自定义Git

  一、忽略特殊文件
           比如数据库配置信息不提交,这时需要在Git根目录下创建一个特殊的.gitignore文件,将要忽略提交的文件名填进去,Git就会自动忽略这些文件
           忽略特殊文件原则:
                   (1)忽略操作系统自动生成的文件,比如缩略图等;
                   (2)忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如
                       Java编译产生的.class文件;
                   (3)忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
           .gitignore文件也要推送到版本库
           例:比如你要添加 a.class 文件到版本库,但是发现添加不了,因为.class文件被忽略了,这时你可以使用 git add -f a.class 强制添加文件到缓存
           也可能是.gitignore文件写的有问题,需要知道哪个规则写错了,使用 git check -ignore -v 文件名    检查.gitignore文件中,该文件类型的忽略信息

   二、配置别名
            就是将git命令起个别名,便于使用和记忆
            git config --global alias.st status        将status起别名为st
            git config --global alias.co check  
            git config --global alias.ci commit 
            git config --global alias.br branch   
   三、搭建Git服务器
            需要一台Linux(Unix)服务器。推荐使用Ubuntu或Debian,通过apt命令就可以安装
            a.    安装Git
                      sudo apt-get install git
            b.    创建Git用户,用来运行Git服务
                      sudo adduser git(用户名)
            c.     加入用户密钥
                      拿到用户的id_rsa.pub文件中公钥内容,将所有公钥导入/home/git/.ssh/authorized_keys文件中,一行一个
            d.    初始化Git仓库
                      新建或选择一个目录为远程仓库,假设为/srv/test.git        进入/srv目录输入 sudo git init --bare test.git
                      Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且
                      服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:    sudo chown -R git:git test.git 
            e.    禁止Shell登录
                   编辑 /etc/passwd 文件        vi /etc/passwd 
                   找到   git:x:1001:1001:,,,:/home/git:/bin/bash                改为  git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
            f.    克隆远程库
                  git clone git@用户名:/srv/test.git

Guess you like

Origin blog.csdn.net/qq_35453862/article/details/117221116