zoukankan      html  css  js  c++  java
  • 看日记学git摘要~灰常用心的教程

    看日记学git

    linux 命令行

    cd
    ls / ls -a 
    clear
    mkdir
    rmdir
    echo "hi, good day" > hi.txt
    touch hello.txt //创建文件
    cat hi.txt //打印文件内容 cat -n hi.txt 带行号打印
    rm hello.txt //删除文件
    vim hi.txt //vim编辑hi.txt 同 vi hi.txt
    help
    tar // tar --help 解压 tar -xvzf mypro.tat.gz
    whoami //当前用户
    

    linux命令行下的快捷键

    //光标定位
    Ctrl-A 相当于HOME键,用于将光标定位到本行最前面
    Ctrl-E 相当于End键,即将光标移动到本行末尾
    Ctrl-B 相当于左箭头键,用于将光标向左移动一格
    Ctrl-F 相当于右箭头键,用于将光标向右移动一格
    
    //删除字符
    Ctrl-D 相当于Del键,即删除光标所在处的字符
    Ctrl-K 用于删除从光标处开始到结尾处的所有字符
    Ctrl-U 用于删除从光标开始到行首的所有字符。一般在密码或命令输入错误时常用
    Alt-BackSpace 用于删除本行所有的内容,基本上和Ctrl-U类似。
    Ctrl-H 删除光标左侧的一个字符
    Ctrl-W 用于删除当前光标左侧的一个单词
    
    //清屏
    Ctrl-L 清屏,相当于clear命令
    
    //导航历史命令
    Ctrl-R 进入历史命令查找状态,然后你输入几个关键字符,就可以找到你使用过的命令
    Ctrl-P 相当于上箭头键,即显示上一个命令
    Ctrl-N 相当于下箭头键,即显示下一个命令
    Alt-. 用于提取历史命令中的最后一个单词。你先执行history命令,然后再敲击此快捷键若干下,你就懂了!
    
    Ctrl-T 用于颠倒光标所在处字符和前一个字符的位置。(目前不知道有什么作用,哪位朋友知道?)
    Ctrl-J 相当于回车键
    
    //大小写转换
    Alt-C 用于将当前光标处的字符变成大写,同时本光标所在单词的后续字符都变成小写。
    Alt-L 用于将光标所在单词及所在单词的后续字符都变成小写。
    Alt-U 用于将光标所在单词的光标所在处及之后的所有字符变成大写。
    

    git的基本使用

    配置

    #设置
    git config --global user.name "youname"
    git config --global user.email "youemail"
    git config --global hello.test onlytest
    //全局配置文件位于 %userprofile%/.gitconfig,  本地配置指cmd的当前工作目录
    #获取
    git config --get user.name
    git config --get-all user.name  //从各个级别(本地 全局)的配置文件中取配置值
    git config --get-regexp user*  //用正则指定想获取的配置项
    #删除
    git config --global --unset hello.test
    git config --global --remove-section hello
    #显示
    git config -l
    git config --global -list
    #显示帮助
    git config -h //命令行里显示简要帮助
    git config --help //浏览器打开git安装目录下的html帮助文件
    

    初始化本地git仓库

    //创建目录 初始化本地git仓库
    mkdir myproject
    cd myproject
    git init //创建空的git仓库或重新初始化已有的仓库,创建.git目录(objects, refs/heads, refs/tags, HEAD和模板文件)
    git init-db //同 git-init
    git fsck //检查仓库有没有错误
    git gc //用垃圾回收机制清除由于reset造成的垃圾代码
    

    三棵树

    working(工作目录) -> index(暂存区) -> HEAD(本地仓库)
    

    添加文件并提交

    git add <file> / git add .
    git commit -m "some comments" 
    git commit -a -m "add and commit"
    

    查看状态

    git diff //工作目录 和 index的差异比较
    git diff --cached//index和HEAD(最近一次提交)的差异比较 
    git diff HEAD //工作目录同HEAD的比较
    git diff <branch1>..<branch2> #分支比较
    
    git status //当前分支状态
    

    查看日志

    git log / git log -p
    git log <tag1>..<tag2> //显示两个标签之间的提交日志
    git log <tag1>.. //显示tag1标签之后的提交日志
    git log --since="2 weeks ago"
    git log -n 3 //查看最近3次的提交日志
    git log v1.0.. somefolder //somefolder从v1.0后的提交日志
    
    gitk --since="2 weeks ago"
    git show HEAD //查看最近一次提交日志
    

    撤销修改

    //git reset 是指 撤销到哪个commitId,缺省commitId 则为HEAD
    git reset //若当前修改stage了,但未提交,则回退,HEAD->index
    git reset HEAD //HEAD->index 同上 
    
    git reset --hard HEAD //working tree, index file 都撤销到最后一次commit的状态
    git reset --soft HEAD^ //恢复到上一次commit的代码 soft表示不改动index file和working tree
    git reset HEAD //默认是 --mixed, index file 和 commit都会撤销到最后一次commit之前的状态, working file不受影响。
    
    git reset -- <file> //撤销某文件的staged状态 (git status查看变化) HEAD->index
    git reset -- . #撤销当前文件夹的staged状态
    
    git rebase //重设基
    

    分支管理

    #创建
    git branch mybranch //创建分支
    git checkout -b local_name origin/remote_name #基于远端分支创建新分支
    如:git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
    git branch <branchName> <tagName> //基于某标签建立分支
    
    #查看
    git branch -a //显示所有分支
    git branch -r //显示远端分支    
    git branch  //列出所有分支 
    git show-branch //显示所有分支 信息多一点 
    git branch -v //同上
    
    #切换 合并
    git checkout mybranch  //切换分支 , 
    git checkout -b otherBranch 创建并切换 
    git checkout master
    //do some change in master
    git merge mybranch //合并分支到主干
    //若有冲突 手动解决冲突后,再次提交
    vim <file>
    git commit -a -m "conflit resolved" //解决冲突后重新提交
    gitk //可视化分支查看界面
    
    #删除
    git branch -d mybranch //分支合并到主干后 删除分支
    git branch -D mybranch //无论分支是否合并 都执行删除
    

    添加和查看远端仓库

    git remote add origin repoUrl //添加远端仓库
    
    git remote show origin 
    #显示远端仓库的详细信息(fetchUrl pushUrl, branches, "local branches configured for 'git pull'" , "local refs configured for 'git push' ")
    

    推送数据

    git push origin localBranch:remoteBranch//推送数据
    
     //本地master推送到远程的remaster 如: 
    git push origin master:remaster 
    

    检出代码

    //检出代码到本地某文件夹, repoUrl可以为远端url或本地路径 
    //(注:只clone远端仓库的当前分支,并非全部分支都clone过来)
    git clone <repoUrl> <localDir>
    
    //clone 远端仓库的某个分支
    git clone -b <remote_branch> <remote_repo> 
    
    //pull的意思是指从远端git仓库fetch修改的代码,
    //然后merge到本地的git仓库当前分支/指定分支中
    git pull <repoLocalPath> master 
    
    //根据本地分支-远程分支的对应关系从远端拉取更新
    //如git clone的仓库和自动和远程仓库的default分支建立对应关系
    git pull 
    
    git fetch origin remote_branch_name:local_branch_name
    //拉取远端git仓库master分支到本地mybranch2分支
    git fetch <remoteRepo> master:mybranch2 
    

    查看git对象信息(commit, tag, branch)

    git show <commitid> //查看某个提交的信息,git log可获得commitid
    git show HEAD //HEAD可以认为是最近一次commit的 commitid 同 git log -n 1 -p
    git show HEAD^ //显示上一次commit的信息(parent commit)
    git show HEAD^^ //显示上上次commit
    git show HEAD~3 //显示前3次commit
    git show HEAD^1 //显示第1个上次commit(parent commit)
    
    git show <branchName> //显示分支信息最近一次提交的信息
    

    标签管理

    git tag <tagName> //给最近的提交加标签 git tag v1.0
    git tag <tagName> <commitid> //给某次commit加标签(起别名)
    git show <tagName> //显示某标签对应commit的信息
    

    查看git对象

    //查看git对象内容(tree, blob, HEAD ,index)
    git cat-file -t <id> //-t 获取id对应对象的类型
    git cat-file commit <commitId> //查询一个commit对象
    git cat-file blob <blobId> //查看二进制对象的内容
    git ls-tree <treeId> //查看树对象
    git ls-files --stage //查看index file的内容
    
    cd .git
    cat HEAD
    

    搜索内容

    //内容搜索
    git grep "keyword" <branchName> //在某分支的文件中 搜索关键字
    git grep "keyword" //在所有历史记录中搜索
    

    查看帮助

    //获取帮助
    git <command> -h //直接在命令行显示用法
    git <command> --help //用浏览器打开对应的文档
    

    一些git命令详解

    1. commit 和 commit -a

    commit -a自动地add所有改动的代码到index file中, 删除在index file中但不在working tree中的文件,执行commit

    git log 和 git log -p

    git log -p 不仅显示commit日志,同时显示每次commit的代码变动

    git merge

    合并两个或两个以上的分支,若自动合并(auto-merge)成功,则变更会被写入index file,需要再 commit 一下; 若发生冲突,则working tree
    会处于一种特殊的状态(git status, git diff 查看冲突情况),手工解决冲突后,需要 git add <file> git commit

    若要撤销合并,则git reset --hard HEAD //--hard表示将working tree和index file回退到之前的状态, soft表示撤销commit的修改,保留working tree和index file的, mixed则表示撤销index file 和commit的修改,保留working tree的

    fetch的用法

    用于从远端git仓库拉取更新, git fetch <options> <repo> <refspec> 格式:, 表示源分支,表示本地的分支
    (dst为空则用当前分支) , 如: git fetch /home/lucy/myrepo master:lucyworks 从myrepo的master分支拉取内容到本地的lucyworks分支

    pull的用法

    用于从远端git仓库拉取更新并合并到本地的git仓库中, git pullgit fetchgit merge命令的组合
    如: git pull /home/lucy/myrepo从myrepo目录拉取内容并合并到本地仓库的当前分支

    git pull .相当于git merge, 如: git pull . mybranch . 表示当前仓库, 忽略了参数,所以就是把当前仓库的mybranch分支拉取并合并到当前分支

    常量的使用

    • HEAD: 最近一次提交
    • MERGE_HEAD: merge产生的commit的父commit
    • FETCH_HEAD: 指向 git fetch获得的object和ref信息的存储位置
    • HEAD^: HEAD的父commit
    • HEAD^^: HEAD的父commit的父commit
    • HEAD^1: HEAD的第一个父commit的信息
    • COMMIT_EDITMSG: 最后一次commit的提交信息

    tag的用法

    给commit起别名, git tag V3.2 5b88c, git show V3.2

    git项目迁移

    只需将开发的文件夹copy到需要的位置即可,需要恢复时,执行一下 git init 即可。

    git命令进阶

    git remote

    git remote update #更新远程主机的数据? 如远端增加或删除分支
    git remote show origin #显示远程主机origin的信息 **很实用**
    git remote -v #查看远端仓库的配置信息
    
    cat -n .git/config #查看本地配置文件
    

    git commit

    # 本地修改文件后,不希望commit到远端仓库可以这样
    git commit -m "commit part of changes" -- folderName_or_fileName
    git commit --amend # 修改最后一次提交记录
    

    git show

    # 显示某次提交的内容 
    git show commitId
    git show  tag1
    git show HEAD^
    git show branchName
    

    git checkout

    git checkout branchName #通常用于切换分支
    
    #撤销未暂存的修改
    git checkout -- <file> # 抛弃未staged的某文件的修改 (index->workspace)
    git checkout . # (未staged的情况下)抛弃工作区修改 
    

    git rm

    git rm <file> # 从版本库中删除文件,同时从工作目录删除文件
    git rm <file> --cached # 从暂存区中删除文件,但不删除工作目录中对应文件
    

    git revert

    git revert commitId # 恢复某次提交的状态,恢复动作本身也创建次提交对象
    
    git revert HEAD # 恢复最后一次提交的状态
    

    git diff

    git diff <file> # 比较当前文件和暂存区文件差异 git diff
    
    git diff <commitId1>..<commitId2> # 比较两次提交之间的差异
    
    git diff <branch1>..<branch2> # 在两个分支之间比较
    
    git diff --staged # 比较暂存区和版本库差异
    
    git diff --cached # 比较暂存区和版本库差异
    
    git diff --stat # 仅仅比较统计信息
    

    git log

    git log <file> # 查看该文件每次提交记录
    
    git log -p <file> # 查看每次详细修改内容的diff
    
    git log -p -2 # 查看最近两次详细修改内容的diff //同 git log -p -n 2
    
    git log --stat #查看提交统计信息
    

    Git 本地分支管理

    #查看、切换、创建和删除分支
    
    git branch -r # 查看远程分支
    
    git branch <new_branchanch> # 创建新的分支
    
    git branch -v # 查看各个分支最后提交信息
    
    git branch --merged # 查看已经被合并到当前分支的分支
    
    git branch --no-merged # 查看尚未被合并到当前分支的分支
    
    git checkout <branch> # 切换到某个分支
    
    git checkout -b <new_branch> # 创建新的分支,并且切换过去
    
    git checkout -b <new_branch> <branch> # 基于branch创建新的new_branch
    
    git checkout commitId # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
    
    git checkout commitId -b <new_branch> # 把某次历史提交记录checkout出来,创建成一个分支
    
    git branch -d <branch> # 删除某个分支
    
    git branch -D <branch> # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
    
     #分支合并和rebase
    
    git merge <branch> # 将branch分支合并到当前分支
    
    git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交
    
    git rebase master <branch> # 将master rebase到branch,
    相当于: git checkout <branch> && git rebase master && git checkout master && git merge <branch>
    
     Git补丁管理(方便在多台机器上开发同步时用)
    
    git diff > ../sync.patch # 生成补丁
    
    git apply ../sync.patch # 打补丁
    
    git apply --check ../sync.patch #测试补丁能否成功
    

    Git暂存管理

    git stash # 暂存
    
    git stash list # 列所有stash
    
    git stash apply # 恢复暂存的内容
    
    git stash drop # 删除暂存区
    

    Git远程分支管理

    git pull # 抓取远程仓库所有分支更新并合并到本地
    
    git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
    
    git fetch origin # 抓取远程仓库更新
    
    git merge origin/master # 将远程主分支合并到本地当前分支
    
    git checkout --track origin/branch # 跟踪某个远程分支创建相应的本地分支
    
    git checkout -b <local_branch> origin/<remote_branch> # 基于远程分支创建本地分支,功能同上
    
    git push # push所有分支
    
    git push origin master # 将本地主分支推到远程主分支
    
    git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
    
    git push origin <local_branch> # 创建远程分支, origin是远程仓库名
    
    git push origin <local_branch>:<remote_branch> # 创建远程分支
    
    git push origin  :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支
    

    Git远程仓库管理

    GitHub
    
    git remote -v # 查看远程服务器地址和仓库名称
    
    git remote show origin # 查看远程服务器仓库状态
    
    git remote add origin git@ github:robbin/robbin_site.git # 添加远程仓库地址
    
    git remote set-url origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) 
    git remote rm <repository> # 删除远程仓库
    
    创建远程仓库
    
    git clone --bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库
    
    scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上
    
    mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库
    
    git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址
    
    git push -u origin master # 客户端首次提交
    
    git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track
    
    git remote set-head origin master # 设置远程仓库的HEAD指向master分支
    
    也可以命令设置跟踪远程库和本地库
    
    git branch --set-upstream master origin/master
  • 相关阅读:
    BZOJ5212 ZJOI2018历史(LCT)
    BZOJ5127 数据校验
    253. Meeting Rooms II
    311. Sparse Matrix Multiplication
    254. Factor Combinations
    250. Count Univalue Subtrees
    259. 3Sum Smaller
    156. Binary Tree Upside Down
    360. Sort Transformed Array
    348. Design Tic-Tac-Toe
  • 原文地址:https://www.cnblogs.com/stephenykk/p/5133795.html
Copyright © 2011-2022 走看看