美文网首页
git实用命令

git实用命令

作者: zeroAzrael | 来源:发表于2020-02-26 17:00 被阅读0次

    由于不支持[TOC]只能手动目录了இ௰இ
    我的博客:PowerScript

    初学者推荐看廖雪峰的git教程
    本篇文章就是对其教程上的内容进行整理

    主要操作

    • 创建版本库
    git init
    
    • 添加到暂存区
    # 可在提交到版本库前多次使用
    git add <file>
    
    • 查看状态
    git status
    
    • 比较文件
    git diff <file> #比较工作区和暂存库的文件
    git diff HEAD --<file> #比较工作区和版本库的文件
    
    • 将暂存区文件提交到版本库
    # 一次性提交所有暂存区文件
    git commit -m "your commentary"
    
    • 查看日志

    优化配置在“其它”的“别名”里<a href="#alias">点这</a>

    git log #输出从最近到最远的提交日志,版本变化时也会变化
    git log -1 #最近一次
    git log --pretty=oneline #更加简洁地输出
    git reflog #查看命令历史,可以用来回到未来的版本
    
    • 切换版本
    git reset --hard <cmmit id>
    #除了commit id,HEAD也可用,HEAD指向当前版本,HEAD^指向前一个版本
    #同理HEAD^^指向上上个版本
    #HEAD~100指向往上的第100个版本
    
    • 撤销修改
    # 如果暂存区有内容就回到暂存区,否则回到版本库
    # 文件删除了也可以用这条命令从版本库里恢复
    git checkout -- <file>
    # 将暂存区中的内容删除
    git reset HEAD <file>
    
    • 删除文件
    git rm <file>
    git commit -m "text"
    
    • 标签
    git tag <name> # 创见一个标签
    git tag #查看所有标签
    git tag <name> <commit_id> # 可给以前的id打标签
    git show <name> # 查看标签信息
    git tag -a <name> -m "text" <commit_id> # 创建有说明文字的标签
    git tag -d <name> # 删除标签
    # 远程操作相关(下面)
    git push origin <name> # 推送某个标签到远程
    git push origin --tags #一次性推送所有尚未推送到远程的本地标签
    # 若要删除远程的标签
    git tag -d <name> # 先删除本地标签
    git push origin :refs/tags/<name> #再用该命令
    

    远程仓库

    提交

    注意用tag提交在上面几行("标签"中)

    • 连接仓库并上传文件
    # 生成密匙对
    ssh--keygen -t rsa -C "youremail@example.com"
    # 查看公匙
    cat ~/.ssh/id_rsa.pub
    # 仓库放了公匙后添加到远程仓库
    git remote add origin git@github.com:xxx/xxxx.git
    # 第一次上传文件(其实-u起到了关联分支的作用)
    git remote # 查看链接的远程仓库
    git remote -v # 也可以查看
    git push -u origin master
    # 之后上传文件
    git push origin master
    
    • 推送到不同的仓库(如github和gitee上的)
    # 此时就不能按原来那样命名origin了,要命不同的名字
    git remote add github git@github.com:xxx/xxxx.git
    git remote add gitee git@gitee.com:xxx/xxxx.git
    
    • 删除远程仓库
    git remote rm origin # 如删除原有的github仓库
    
    • 下载仓库
    git clone git@github.com:xxx/xxxx.git
    # 创建远程仓库的dev到本地(原因是上面的命令默认拉去master分支)
    git checkout -b dev origin/dev
    
    • 若合作时远程仓库的提交有冲突
    # 拉去dev分支
    git pull
    # 若出现错误提示(no tracking information),把提示命令复制下来,如下
    # 指定两branch的链接(一次就行)
    git branch --set-upstream-to=origin/<branch name> <branch name>
    # 再pull
    # 之后再手动解决冲突
    #再提交
    git commit -m "text"
    git push origin dev
    

    分支相关

    git branch # 查看分支
    git branch <branch name> # 创建分支
    #切换分支
    git checkout <name>
    git switch <name> # 同样可以
    # ------
    # 创建+切换分支
    git checkout -b <name>
    git switch -c <name> # 同样可以
    # ------
    # 合并某分支到当前分支,启用[Fast forward](即完成后删除那个分支)
    git merge <naem> 
    # ------
    git branch -d <name> # 删除分支(已合并)
    git branch -D <naem> # 强行丢弃一个没被合并的分支
    git log --graph # 查看分支合并图
    git log --graph --pretty=oneline --abbrev-commit # 简洁一点
    # 合并某分支到当前分支,不启用[Fast forward](即不删除那个分支,利于团队合作)
    # --no-ff表示 不删除
    # -m 即要新建一个commit
    git merge --no-ff -m "text" <branch name>
    

    一般管理图

    ======master====>
        ^          ^
    ====|=dev======|========>
          ^              ^
    ======|==Mike===>    |
    =================Bob=|==>
    
    

    Bug分支

    # 假设现在为dev分支,要到master分支上修bug
    git stash # 把当前工作现场暂时储存起来
    # 现在用'git switch'可以看到工作区是干净的
    git checkout master
    git checkout -b issue-101 #如果已有,则不用'-b'
    # 然后修复文档,如index.php
    git add index.php
    git commit -m "fix bug 101"
    
    git switch master
    git merge --no-ff -m "merged bug fix 101"
    
    git switch dev
    git stash list #列出储存的工作现场
    git stash pop #恢复并删除stash
    # 刚才的命令等价于'git stash apply'加上'git stash drop'
    # 'git stash pop stash@{0}'等可以指定,apply、drop也可以这样。
    # 若dev分支也有master上的bug
    git cherry-pick <commit_id> # 把刚才在master上的特定提交复制到dev上
    

    其他

    • 命令
    git rebase # 作用是把提交历史变成一条直线
    # 可以用git log --graph --pretty=oneline --abbrev-commit 查看提交历史
    #不建议随便用,因为别人开发也会受到影响
    
    • 忽略特殊文件

    只需要在工作区下添加".gitignore"文件即可
    有现成的配置文件

    • 配置别名

    <span id="alias">

    git config --global alias.st status # st就表示status了, git st
    # 使git log更加好用 git lg
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    # 由于我的yellow显示为white,就改了一下:
    git config --global alias.lg "log --color --graph --pretty=format:'%C(bold red)%h%Creset -%C(bold cyan)%d%Creset %s %Cgreen(%cr) %Cred<%an>%Creset' --abbrev-commit"
    # 其它如git reset HEAD file 改为 git unstage 
    git config --global alias.unstage 'reset HEAD'
    

    至于GUI版git自建git服务器不在本文范围内

    相关文章

      网友评论

          本文标题:git实用命令

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