Git基本操作

作者: 四五20 | 来源:发表于2019-06-10 17:04 被阅读0次

    只为记录,以后尽量按照Git的官方帮助文档写!

    clone

    • 从远程库中克隆到本地目录
    git clone <版本库地址> <本地目录>
    //在当前目录创建新一个文件夹文件夹
    mkdir <文件夹名称>
    //进入到这个文件夹
    cd <文件夹名称>
    git clone <版本库地址>
    

    init

    此命令用于已有项目,然后想用Git管理项目

    1. 进入到项目目录(例如在桌面)
      cd ~/desktop/xxx
    2. 初始化仓库
      git init
    3. 将所有文件添加到索引库
      git add .
    4. 提交代码并填写提交信息
      git commit -m "xxxx"
    5. 添加远程呢很难过Git地址
      git remote add origin <地址>
    6. 如果网页创建仓库存在xxx.md文件或其他的文件,需要先将远程库的文件更新下来才能将本地项目推送到远程,如果仓库是空则忽略这个步骤
      git pull --rebase origin master
    7. 将项目推送到远程仓库
      git push -u origin master

    config

    此命令用于获取并设置存储库或全局选项。这些变量可以控制Git的外观和操作的各个方面。

    • 配置用户名和密码(当安装Git后首先要做的事情,因为每次提交Git都会使用该信息,它被永远嵌入到了你的提交信息中)
      git config --global user.name "xxx"
      git config --global user.email "xxx"
    • 如果希望在一个特定的项目中使用不同的名称和e-mail地址,可以在该项目中运行该命令而不要--global选项
      git config user.name "xxx"
      git config user.email "xxx"
    • 配置编辑器(默认vim)
      git config --global core.editor xxx
    • 配置比较工具
    //Git可以接受kdiff3、tkdiff、meld、xxdiff、emerge、vimdiff、gvimdiff、ecmerge和opendiff作为有效的合并工具。也可以设置一个客户端的工具。
    git config --global merge.tool xxx
    
    • 检查配置
      git config --list
      git config {key}
    • 添加配置项(sectionkeyvalue一个都不能少)
      git config [--local|--global|--system] --add section.key value
    • 删除配置项(sectionkey一个都不能少)
      git config [--local|--global|--system] --unset section.key

    add

    此命令将要提交的文件的信息添加到索引库中(将修改添加到暂存区)

    • 提交所有变化
      git add -A
    • 提交被修改(modified)和被删除(delete)文件,不包括新文件(new)
      git add -u
    • 提交新文件(new)合被修改(modified)文件,不包括被删除(delete)文件
      git add .
    • 提交指定/文件
      git add <文件路径>
    • 查看所有修改过或已删除文件但没有提交的文件
      git add -i
      git add -i.png
        Test1ViewController.m表示已经被执行过git add操作,待提交。即已添加到索引库中。
        project.pbxproj``Test2ViewContoller.h``Test2ViewController.m表示已处于tracked下,已经被修改了,但是还没有执行git add操作,即还没有添加到索引库中。
        通过编号首字母全称加回车执行子命令(例如:3rrevert)
        执行命令后,Git会列出文件,输入文件编号加回车则执行子命令操作,再次回车退出子命令。
        1. status子命令:查看文件状态都,与git add -i相似。
        2. update子命令:将文件加入到索引库中。
        3. revert子命令:把已添加到索引库中的文件从索引库中移除。
        4. add untracked子命令:把没有被git管理的文件添加到索引库中。
        5. patch子命令:补丁这一条没有看懂
        6. diff子命令:比较索引库中的文件与原版的差异。
        7. quit子命令:退出git add -i命令系统。
        8. help子命令:查看git add的帮助文档,也可以通过git add -h进入。

    mv

    • name1重命名为name2(文件name必须真实存在)
      git mv name1 name2
    • 移动文件到指定目录下(文件与目录必须真实存在,并且在文件夹内部存在同名文件)
      git mv <文件> <文件夹目录>

    reset

    • 回退到上个版本,只保留源码,回退commit和index信息
      git reset --mixed
      git reset
    • 回退上个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
      git reset --soft
    • 彻底回退到上个版本,本地的源码也会变为上一个版本的内容
      git reset --hard
    • 回退所有内容到上一个版本
      git reset HEAD^
    • 回退README.md这个文件的版本到上一个版本
      git reset HEAD^ README.md
    • 向前回退到第3个版本
      git reset --soft HEAD~3
    • 将本地的状态回退到和远程的一样
      git reset --hard origin/master
    • 会退到某个版本
      git reset xxx
    • 回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit
      git revert HEAD

    rm

    • 删除文件
      git rm xxx
    • 删除文件夹
      git rm -r xxx
    • 将文件从索引库中移除,对文件本身不做任何操作
      git rm --chcahed xxx

    bisect

      用来查找哪一次代码提交引入了错误。
      它的原理很简单,就是将代码提交的历史,按照两分法不断缩小定位。所谓"两分法",就是将代码历史一分为二,确定问题出在前半部分,还是后半部分,不断执行这个过程,直到范围缩小到某一次代码提交。

    • 启动查错(必须在最上层路径)
      1、 起点是没有错误的提交指针,
      2、 终点是最近一次的HEAD。当然,指定其他范围也可以。
      git bisect start <终点> <起点>
      3、执行命令后,代码库会切换到这段范围的中间那次提交。
      4、测试项目,没有问题
      git bisect good
      5、测试项目,有问题
      git bisect bad
      6、接下来,不断重复这个过程,直到成功找到出问题的那一次提交为止。这时,Git 会给出如下的提示。
      xxx is the first bad commit
      7、退出查错
      git bisect reset
    • 根据指针查找提交代码,修改Bug。

    grep

      检索当前目录下的文件中的内容


    baba.txt.png
    mama.txt.png
    • 检索指定关键字
      git grep www
      检索指定关键字.png
    • 检索指定关键字在哪一行
      git grep -n www
      检索指定关键字在哪一行.png
    • 检索指定关键字在哪些文件中
      git grep --name-only www
      检索指定关键字在哪些文件中.png
    • 统计每一个文件中包含关键字的行数
      git grep -c l
      统计每一个文件中包含关键字的行数.png
    • 在指定的commit中检索关键字
      git grep xxx <指针>
      git grep www HEAD #在最近一次提交中检索
      在指定的commit中检索关键字.png
    • 与条件检索
      git grep -e www --and -e good
      与条件检索.png
    • 或条件检索
      git grep -e www --or -e bad
      或条件检索.png
    • 与或组合条件检索
      git grep -e www \( -e bad -e good \)
      与或组合条件检索.png
    • 全匹配检索
      git grep --all-match -e www --or -e bad
      全匹配检索.png
      1、全匹配和普通匹配的区别在于,全匹配必须在全文满足指定的条件。
      2、比如上面的例子中,如果是全匹配,那么必须在文件中,同时具有wwwbad(没要同一行)。
      3、而普通匹配,只要在文件中具有www或者bad中的一个即可。

    log

      如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者、提交日期、和提交说明
      如果记录过多,则按Page Up、Page Down来控制显示
      按q退出历史记录列表

    • 按补丁显示每个更新间的差异
      git log -p
    • 尽在已修改的提交信息后显示文件清单
      git log --name-only
    • 显示ASCII图形表表示的分支合并历史
      git log --graph
    • 一行显示,只显示哈希值和提交说明
      git log --oneline
    • 查看文件某个范围的提交记录
      git log -L <起始行数>,<结束行数>:<文件名>

    show

    • 显示文件
      git show <哈希值/tag版本>
    • 查看哈希值(需要到达文件的目录或添加文件路径)
      git hash-object <文件名>

    status

    • 显示工作目录和暂存区的状态
      git status

    branch

    • 查看当前有哪些分支(*表示当前所在分支)
      git branch
    • 新建分支
      git branch xxx
    • 查看本地和远程分支
      git branch -a
    • 查看远程分支
      git branch -r
    • 修改分支名
      git branch -m <old> <new>
    • 删除远程分支
      git push origin --delete xxx
    • 删除本地分支
      git branch -D xxx

    checkout

    • 检出分支
      git checkout xxx
    • 新建分支
      git checkout -b xxx
    • 从远程取得本地分支
      git checkout -b xxx origin/xxx
    • 放弃当前文件的修改
      git checkout <分支名> <文件名>

    commit

    • 提交
    git commit -m xxx
    git commit -a -m xxx
    git -am xxx
    

    diff

    • 比较当前文件和未提交的文件存在哪些差异
      git diff <file>
    • 查看所有文件和未提交的差异
      git diff
    • 比较已经提交文件和上次提交之间的差异
      git diff --cached
      git diff --staged
    • 显示下次提交会提交什么内容
      git diff HEAD
    • 比较两个分支最新提交
      git diff <分支1> <分支2>
      git diff <分支1>..<分支2>
    • 仅仅比较统计信息
      git diff --stat
    • 查看当前分支和其他分支的差别
      git diff <分支>
    • 比较两次提交的差异
      git diff <指针1> <指针2>

    merge

    • 合并分支到当前分支
      git merge <分支1> <分支2>

    mergetool

    1. 下载Beyond Compare 密码:1anl
    2. 打开Beyond Compare


      安装命令行工具.png
    3. 编辑配置文件
      git config --edit --global
    4. 将下方文本粘贴进去
    [diff]
            tool = bcomp
    [difftool "bcomp"]
            cmd = \"/usr/local/bin/bcomp\" \"$LOCAL\" \"$REMOTE\"
    [difftool]
            prompt = false
    [merge]
            tool = bcomp
    [mergetool]
            prompt = false
    [mergetool "bcomp"]
            cmd = \"/usr/local/bin/bcomp\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    
    1. 合并不再生成备份文件
      git config --global mergetool.keepBackup false
    2. 使用方法
      git difftool <指针>
      git difftool <分支名>
      git mergetool

    如果difftool需要对比的文件比较多,在你关闭Beyond Compare的时候它会再次打开,不要担心,这不是bug,这是主动打开下一个有差异的文件。不喜欢这样的话可以执行git config --global difftool.prompt true,这样的话每次弹出都会在终端询问一遍。

    1. Beyond Compare合并代码使用方法

    rebase

    • 合并分支
      当前分支为dev分支checkout的分支,dev和当前分支都有修改,将当前分支的commit执行dev新的commit
      git rebase <dev>
      此过程可能会出现冲突
      解决冲突后执行git add .将所有修改添加到索引库
      完成修改后执行git rebase --continue,git会继续执行rebase操作
      或者可以执行git rebase --abort来终止rebase操作,并且分支会回到 rebase 开始前的状态。
    • 合并提交
    //合并最近四次commit
    git rebase -i HEAD~4
    //合并提交从最近到指定commit(xxx为哈希值,可用`git log`指令查看哈希值)
    git rebase -i xxx
    //如果出现冲突解决办法如上一条操作
    'pick':`生成一条提交`
    `fixup`:`放弃本此提交记录`
    `squash`:`合并本次提交记录到上一条`
    
    • 如果终端出现闪退
      git rebase --edit-todo

    tag

    • 创建标签
      git tag -a xxx -m "xxx"
    • 查看所有标签
      git tag
    • 检索标签
      git tag -l 'xxx'
    • 删除标签
      git tag -d xxx
    • 创建轻量级标签
      git tag xxx
    • 后期加注标签
      git tag -a xxx <指针> -m "xxx"
    • 推送标签到远程
      git push origin xxx
    • 推送所有标签到远程
      git push origin --tags

    fetch

    • 更新所有分支
      git fetch
    • 更新具体分支
      git fetch <远程主机名> <分支名>
      最后可用用mergerebase命令合并远程分支到本地分支。

    pull

    • 拉取远程与本地分支合并(如果本地分支为当前分支:后则可以省略)
    git pull <远程主机名> <远程分支名>:<本地分支名>
    git pull origin master:dev
    

    push

    • 将当前分支推送到远程
      git push
    • 将本地分支推送到origin主机的远程分支(无远程分支则会新建一个远程分支)
      git push origin xxx
    • 推送指定分支到远程
      git push origin xxx:xxx
      1、如果省略本地分支
      git push origin :xxx
      3、表示删除指定远程分支,因为这等同于推送一个空的分支到远程
      git push origin --delete xxx
    • 推送所有本地分支到远程
      git push --all origin

    stash

    • 储藏修改
      git stash
    • 储藏修改并添加提交信息
      git stash save "xxx"
    • 查看所有储藏
      git stash list
    • 恢复储藏
      1.apply恢复后不会在存储库中删除本条记录,pop回复后会在存储库中直接删除本条记录
      2.指针格式stash@{1},如果省略指针则表示恢复最近一条
      git stash apply/pop <指针>
    • 检查储藏修改文件
      1.指针格式stash@{1},如果省略指针则表示查看最近一条
      2.后面加-p--patch则可以查看详情
      git stash show <指针>
    • 删除储藏
      git stash drop <指针>
    • 清空储藏
      git stash clear

    blame

    • 查看文件每行代码是谁修改的
      git blame xxx
    • 查看文件某个范围
      git blame -L <起始行数>,<结束行数> <文件名>
      git blame -L <起始行数>,+<显示行数> <文件名>

    clean

    批量删除未添加到索引库的文件
    n查看
    f文件
    d文件夹

    • 查看当前目录下哪些文件将要被删除
      git clean -n
    • 删除当前目录下的文件
      git clean -f
    • 删除指定目录下的文件
      git clean -f <路径>
    • 删除文件和文件夹
      git clean -fd
      每次删除之前要加n查看下哪些要被删除,谨防删错。

    reflog

    • 查看所有参考日志(定位到想要回退的版本git reset --hard HEAD@{n})
      git reflog <分支> <show>
    • 查看5条参考日志
      git reflog <分支> <show> -5
    • 删除某一条参考日志
      git reflog delete HEAD@{n}
      git reflog expiregit reflog exists这两条命令还没有研究明白

    相关文章

      网友评论

        本文标题:Git基本操作

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