美文网首页
[工具使用]Git经验笔记

[工具使用]Git经验笔记

作者: 杨山炮 | 来源:发表于2019-07-14 10:15 被阅读0次

    Git笔记

    git安装(windows10 & Ubuntu)

    windows10:git-for-windows

    #Ubuntu:
     sudo apt-get install aptitude 
     sudo aptitude install git
    

    git配置

    • git config –global user.name “Yourname”
    • git config –global user.emailYouremail@xxx.com
    • ssh-keygen -t rsa -C “Youremail@xxx.com” 生成公私钥
    • setting → SSH and GPG keys → New SSH key 实现免密登录

    git config的作用域及配置

    git config --local  这里的配置只对某个仓库有用
    git config --global 对当前用户的所有仓库都有用
    git config --system  对系统所有登录用户都有效
    ###显示config的配置
    git config --list --local  
    git config --list --global 
    git config --list --system 
    

    git和gitlab管理多对私公钥

    ssh-keygen -t rsa -C "yxl@yxl" -f ~/.ssh/gitlab_id_rsa

    ssh-add ~/.ssh/id_rsa
    ssh-add ~/.ssh/gitlab_id_rsa
    //上面两部出错的时候执行以下在执行以上两步
    ssh-agent bash

    可以通过 ssh-add -D 来清空私钥列表
    ssh-add -D可以通过 ssh-add -l 来确私钥列表
    ssh-add -l

    在 ~/.ssh 目录下新建一个config文件

    touch config
    # gitlab
    Host github.com
        HostName github.com
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa
    
    # gitlab
    Host gitlab.com
        HostName gitlab.com
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/gitlab_id_rsa
    
     ssh -T git@github.com
    

    学习网址

    廖雪峰Git教程

    git基础知识

    4个位置

    • 工作区
    • 暂存区
    • 本地仓库
    • 远程仓库

    5个状态

    • 未修改(Original)
    • 已修改,未add(未暂存)
    • 已修改,已add(已暂存:git add)
    • 已提交,未推送(git commit)
    • 已推送 (git push)

    git基本使用

    git add -A  提交所有变化(包括删除了修改过的文件)
    git add -u  提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
    git add .  提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
    git add <FileName> | . 将文件加入到暂存区
    git commit -m "...." 将暂存区的文件添加到本地版本库
    git commit - am "...." 等同于上面两步,前提是文件是tracked状态
    git commit -m "commnet...."
    git mv oldFileName newFileName  git重命名
    
    //提交一个文件之后想重新对这次提交进行撤销合并其他文件重提
    //交让两次不同提交变成一次提交(首先要把第二份add一下)
    git commit --amend 
    

    查看log

    git log 查看本地版本库信息
    git log -n2 查看最近两条 commit信息
    git log --oneline 以一行显示commit信息
    git log -n2 --oneline 上者合并
    git log --author="yeqianxun" 按作者查看log
    git log --graph  以图形方式显示 
    git log --decorate 会显示出tag信息.
    git reflog  查看所有commit信息,用于回到未来
    
    

    代码撤销

    
    //丢掉工作区的修改
    git checkout -- <fileName>
    // 取消上次暂存区的缓存
    git reset HEAD file <fileName>
    // 不删除工作空间改动代码,撤销commit,不撤销git add . 
    git reset --soft HEAD
    //不删除工作空间改动代码,撤销commit,并且撤销git add . 等价于git reset HEAD~1
    git reset  --mixed HEAD ~1
    //删除工作空间改动代码,撤销commit,撤销git add .
    git reset  --hard HEAD ~1
    
    

    代码状态临时保存

    git stash 保留工作现场
    git statsh apply + stashID 恢复到某个工作场景
    git stash drop + stashID 删掉之前保留的工作场景
    git stash pop  上述两条命令之和
    

    分支管理

    //丢弃一个没有被合并过的分支,可以强行删除。
    git branch -D <name>
    //普通的删除分支的方式
    git branch -d <name>
    //切换分支
    git checkout <branch_name>
    //把dev分支的工作成果合并到master分支上HEAD>>master
    git branch -v | git branch -a 常看本地有多少分支
    //在本地创建和远程分支对应的分支
    git checkout  -b <yourBranchName> commitID 基于commitID创建分支并切换分支
    //建立本地分支和远程分支的关联
    git branch --set-upstream-to=origin/<remoteBranch> <LocalBranchName>
    

    代码合并

    //将dev合并到当前分支,合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
    //而fast forward合并就看不出来曾经做过合并。merge他会保留每一次提交的历史
    git merge dev
    //把本地未push的分叉提交历史整理成直线,合并到当前分支;
    git rebase 
    //将其他分支的部分代码合并到当前分支
    git cherry-pick  <commit_id>
    

    远程仓库管理

    git push <远程主机名> <本地分支名>  <远程分支名>
    //查看远程库的信息
    git remote ->origin
    git remote -v 
    //显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
    //origin  git@github.com:yeqianxun/learngit.git (fetch)
    //origin  git@github.com:yeqianxun/learngit.git (push)
    //上面
    //推送本地分支到远程
    git push origin <LocalBranchName>
    
    //要关联一个远程库
    git remote add origin git@server-name:path/repo-name.git;
    //关联后,第一次推送master分支的所有内容;
    git push -u origin master
    //每次本地提交后,只要有必要,就可以使用命令推送最新修改;
    git push origin master
    
    //同步服务器
    git pull
    

    标签管理

    //打标签
    git tag <TagName> 默认标签是打在最新提交的commit上
    //将标签打在指定的commiID上.PS:标签不是按时间顺序列出,而是按字母排序的
    git tag <TagName> <commitID>
    //创建带有说明的标签
    git tag -a <tagName> -m <comment>
    //删除标签
    git tag -d <tagName>
    //推送标签到远程。创建的标签都只存储在本地,不会自动推送到远程
    git push origin <tagname>
    //一次性推送全部尚未推送到远程的本地标签
     git push origin --tags
    //删除远程标签
    1. git tag -d <tagName> 删除本地标签
    2.git push origin :refs/tags/<tagName>
    

    git merge,git rebase的区别

    • 提交记录的区别
      merge 保持了修改内容的历史记录,但是历史记录会很复杂;而 rebase 后的历史记录简单,是在原有提交的基础上将差异内容反映进去
    • 撤销合并的不同
      如果使用 merge 进行合并,可以使用 revert 命令对 merge 的内容进行撤销操作,而使用 rebase 则不行,因为已经没有 merge commit 了

    参考文章:
    https://www.cnblogs.com/ludashi/p/8213550.html

    git diff ,git format-patch的应用

    format-patch 和diff 的区别:

    • git diff生成的UNIX标准补丁.diff文件
    • git format-patch生成的Git专用.patch 文件

    创建patch文件

    //commit_ID对应的前n次提交作对比生成patch文件
    git format-patch <commit_ID> -n
    //两个commitID之间的所有区别
    git format-patch <commitID_1> <commitID_2>
    

    创建diff文件

    //将两个commitID之间的区别生成到指定的diff文件中
    git diff  <commitID_1>  <commitID_2>  <diff文件名>
    

    检查patch/diff文件是否可以直接应用到项目中

    git apply --check <path/to/xxx.patch>
    git apply --check <path/to/xxx.diff>
    

    应用patch

    git apply <path/to/xxx.patch>
    git apply <path/to/xxx.diff>
    //自动合入 patch 中不冲突的代码改动,同时保留冲突的部分
     git  apply --reject  <path/to/xxx.diff>
    

    相关文章

      网友评论

          本文标题:[工具使用]Git经验笔记

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