美文网首页
[Git 使用] Git学习手册

[Git 使用] Git学习手册

作者: 学识浅薄的胖 | 来源:发表于2018-04-25 16:30 被阅读0次

    文档标识:[C-180108-M-20200106]
    知识来源:廖雪峰 Git教程
    内容链接均来源于互联网,如有侵权,请联系删除。

    创建git 用户

    • 设置用户名称
    git config --global user.name "Name"
    
    • 设置用户邮箱
    git config --global user.email "email@example.com"
    

    创建git 仓库

    • 创建文件夹
    mkdir folder
    
    • 初始化仓库
    git init
    

    添加文件至仓库

    • 添加文件至暂存区(stage)
    git add files
    
    • 提交修改至版本库
    git commit -m "it's a example"
    
    • 已跟踪文件跳过暂存直接提交修改
    git commit -a -m "ignore submit stage"
    

    版本回退与文件比对

    • 查看仓库状态
    git status
    
    • 查看工作区与暂存区之间的修改内容
    git diff
    
    • 查看暂存区与版本库之间的修改内容
    git diff -cached
    
    • 查看工作区与版本库之间的修改内容
    git diff HEAD
    
    • 查看提交详细日志
    git log
    
    • 回退至以前的版本
    git reset --hard HEAD^
    

    -- HEAD 表示最新版本
    -- ^ 表示上一个版本,可多次叠加
    -- HEAD~10 表示最新版本往上10个版本

    git reset --hard commit id
    

    -- 可以回到指定的commit id 的版本

    • 查看版本提交或回退的日志
    git reflog
    
    • 撤销对文件做的修改
    git checkout --file
    
    • 撤销已经提交到暂存区的文件
    git reset HEAD file
    
    • 提交一个删除文件到暂存区
    git rm file
    
    • 已暂存的文件使用强制删除
    git rm -f file
    
    • 将文件添加到忽略文件中
    git rm --cached file
    

    远程仓库

    • 创建SSH密钥
    ssh-keygen -t rsa -C "email@example.com"
    
    • 登录GitHub后把生成的公钥添加到账户设置
    • 在本地添加与远程仓库的关联
    git remote add origin git@github.com:****/LearnGit.git
    

    origin 表示远程仓库的名称
    git@... 表示远程仓库的地址

    • 添加关联后,将本地仓库推送至远程仓库
    git push -u origin master
    

    首次连接提示警告信息,确认指纹信息是否来自GitHub.com

    The authenticity of host 'github.com (192.*.*.*)' can't be established.
    RSA key fingerprint is SHA256:nThbg6*****WGl7E1IGOCspRomTxdCARLviKw6E5SY8.
    Are you sure you want to continue connecting (yes/no)?

    • 本地仓库修改后,直接推送
    git push origin master
    
    • 从远程仓库复制(下载)一份完整项目
    mkdir clonedemo
    cd clonedemo
    git clone git@github.com:****/LearnGit.git
    

    这样在clonedemo文件夹下生成了 LearnGit 的完整项目文件

    仓库分支

    • 创建和合并分支
    git branch dev
    
    • 创建dev的分支
    git checkout dev
    
    • 切换到dev分支
    git checkout -b dev
    
    • 创建并切换到dev分支
    git branch
    

    可查看当前所有分支,当前分支为带*的

    • 合并分支
    git merge dev
    

    把dev 分支合并到当前分支

    • 删除分支
    git brach -d dev
    

    删除dev 分支

    当分支没有被合并时,需要强制删除

    git branch -D dev
    
    • 冲突解决
      在执行git merge时会出现CONFLICT的警告,当master 分支需要合并其他分支时,需要解决冲突后才可以合并,无切换至冲突的分支。

    • 分支管理策略
      通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
      如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

    git merge --no-ff -m "merge with no-ff" dev
    

    Bug分支

    当分支工作未提交,需要暂时保存已暂存的文件,不影响其他分支的操作。

    • 隐藏当前工作
    git stash
    

    可以将已经暂存的文件隐藏起来。
    当文件已修改,未暂存则无法使用stash不能隐藏。如果不使用stash,那么已修改的文件会影响其他分支的操作。

    • 恢复已隐藏的工作

    查看已保存的stash列表

    git stash list
    

    选择需要恢复的工作

    git stash apply stash@{0}
    

    多人协作

    • 查看远程库信息
    git remote
    

    或者

    git remote -v
    

    显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

    • 推送分支
    git push origin master
    

    并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要?

    1. master分支是主分支,因此要时刻与远程同步;
    2. dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    3. bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    • 抓取分支

    当多人协作时,对同一分支的推送产生冲突,需要先解决冲突。使用以下命令获取远程仓库的数据:

    git pull
    

    多人协作的工作模式通常是这样:
    首先,可以试图用git push origin branch-name推送自己的修改;
    如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    如果合并有冲突,则解决冲突,并在本地提交;
    没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
    如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

    分支管理

    Git的标签本质是版本库的快照,与分支一样,但是分支可以进行移动,标签创建后无法移动,为了代替版本的commit号码,方便记忆。

    • 创建标签

    快速创建标签

    git tag name
    

    显示所有标签,标签按字母顺序进行排序。

    git tag
    

    一般标签的创建默认是在最新的版本,当需要补创建标签则需要把版本commit号码加上,可使用git log --oneline查看,例如:

    git tag v1.0 332a1d3
    
    • 查看标签的详细信息
    git show v1.0
    
    • 创建带说明的标签
    git tag -a v1.1 -m "version 1.0" 24d123f
    
    • 创建带有私钥签名的标签,签名采用PGP签名
    git tag -s v1.1 -m "version 1.0" 24d123f
    
    • 删除标签
    git tag -d v1.0
    
    • 远程推送某个标签到远程仓库
    git push origin v1.0
    
    • 远程推送所有标签到远程仓库
    git push origin --tags
    
    • 远程删除标签,需要先删除本地标签后,在执行以下命令:
    git push origin:refs/tags/v1.0
    

    删除后显示如下:

    To github.com:****/LearnGit.git
     - [deleted]         v1.0
    

    注意:这里的标签一般指的就是版本,在github上的可以看到标签被放在releases一般。

    自定义git

    • 忽略不需要提交的文件

    在git工作区下面创建.gitignore文件,把需要忽略的文件名填入。
    忽略文件的原则是:
    忽略操作系统自动生成的文件,比如缩略图等;
    忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
    忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

    在github上有适合各类语言环境的gitignore文件,可以下载使用:

    https://github.com/github/gitignore
    

    例如python工作环境下的配置:

    # Byte-compiled / optimized / DLL files 
    __pycache__/ 
    *.py[cod] 
    *$py.class 
    
    # C extensions 
    *.so 
    
    # Distribution / packaging 
    .Python 
    build/ 
    develop-eggs/ 
    dist/ 
    ...
    

    #符号开头的为注释,可以在文件内填入文件夹或指定后缀的文件名。

    如果在忽略文件内的文件,使用git add命令添加,那么会提示文件被忽略不被提交。如果确实需要添加,则需要使用以下命令:

    git add -f file
    

    检查某类文件是否在忽略文件内,则可以使用以下命令检查:

    git check-ignore -v file
    
    • 配置别名
    git config --global alias.st status
    

    这样使用git st就可以代替git status 使用。
    当使用git config时,加了--global指的是对当前所有仓库生效,如果不加则对当前仓库生效。

    • 查看仓库配置
    cat .git/config
    

    当前用户的Git配置放在用户主目录的隐藏文件.gitconfig文件内,windows系统下放在用户目录(“文档” 文件夹的上一级)里。

    搭建git服务器

    第一步,安装git:

    sudo apt-get install git
    

    第二步,创建一个git用户,用来运行git服务:

    sudo adduser git
    

    第三步,创建证书登录:
    收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

    第四步,初始化Git仓库:
    先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

    sudo git init --bare sample.git
    

    Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

    sudo chown -R git:git sample.git
    

    第五步,禁用shell登录:
    出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

    git:x:1001:1001:,,,:/home/git:/bin/bash
    

    改为:

    git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
    

    这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

    第六步,克隆远程仓库:
    现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

    git clone git@server:/srv/sample.git
    
    Cloning into 'sample'...
    warning: You appear to have cloned an empty repository.
    

    相关文章

      网友评论

          本文标题:[Git 使用] Git学习手册

          本文链接:https://www.haomeiwen.com/subject/ewcskftx.html