• git基本操作与分支


    转载

    基础

    • git init 初始化
    • git status 检查当前文件状态(查看已被暂存的修改或未被暂存的修改)
    • git status -s 检查当前文件状态(查看已被暂存的修改或未被暂存的修改-简略版)
      • A: 你本地新增的文件(服务器上没有).
      • C: 文件的一个新拷贝.
      • D: 你本地删除的文件(服务器上还在).
      • M: 文件的内容或者mode被修改了.
      • R: 文件名被修改了。
      • T: 文件的类型被修改了。
      • U: 文件没有被合并(你需要完成合并才能进行提交)。
      • X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)。
    • git add filename 追踪新增文件/暂存已修改文件
    • git add * 添加所有未跟踪文件/暂存所有已修改问及那
    • 查看已暂存和未暂存的修改
      • git diff 查看尚未暂存的文件更新了哪些部分
      • git diff --staged 查看已暂存的将要添加到下次提交里的内容
      • git diff --cached 查看已经暂存起来的变化
    • 提交更新
      • git commit 弹出编辑器输入更新内容即可(#号会被过滤,不能为空消息)
      • git commit -v 弹出编辑器输入并显示代码更改信息
      • git commit -a 自动把所有已经跟踪过的文件暂存起来一并提交(不建议)
      • git commit -m "更新内容描述" 直接命令行编写提交备注信息,不会弹出编辑器
    • 移除文件
      • rm filename 删除文件
      • git rm filename 删除文件跟踪
      • git rm -f filename 强制删除之前修改过或已经放到暂存区的文件
      • git rm --cached filename 仓库中删除/暂存区域移除(文件还是会在原来的地方)
    • git mv file_from file_to 移动文件/重命名
    • git clone url 克隆指定远程项目(自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支)
    • 查看提交历史
      • git log
      • git log -p -2 显示每次提交所引入的差异,如使用 -2 选项来只显示最近的两次提交
      • git log --stat 简略统计信息
      • git log --pretty=oneline 个性化显示记录(pretty值:oneline、short、full 、fuller )
      • git log --pretty=format:"%h %s" --graph 形象地展示你的分支、合并历史(不仅这几个参数)
      • 还可以指定作者、日期等高级搜索功能
      • 还可以查看指定文件的记录
    • git commit --amend 重新修改上次 commit 的提交信息(包括上次 commit 之后新暂存区的代码)
    • git reset HEAD filename 取消暂存(危险)
    • git checkout -- filename 撤销修改/还原成上次提交的样子(危险)
    • git reset --hard HEAD 回到上一次提交的状态,未提交的工作都会丢失(危险)
    • 远程仓库
      • git remote 查看远程仓库
      • git remote -v 查看远程仓库URL
      • git remote add 仓库名 仓库地址 添加远程仓库
      • git branch --set-upstream-to=远程仓库名/远程分支名 本地仓库当前分支关联/绑定远程分支,每次 push 就不需要指定远程仓库分支名了
      • 从远程仓库中抓取与拉取
        • git fetch 仓库名 从远程仓库中获得数据(只下载/不合并)
        • git pull 当前分支设置了跟踪远程分支,来自动抓取后合并该远程分支到当前分支(相当于 git fetch + git merge)
      • git push 将当前分支推送到远程仓库关联分支(需要先关联远程分支)
      • git push 远程分支名 本地分支名 推送指定分支到远程仓库分支(关联远程分支后可以省略远程仓库名)
      • git push 远程仓库名 远程仓库分支名:本地分支名 推送到远程仓库分支(未关联远程分支的情况下进行推送)
      • git push -f 远程服务器分支名 当前本地分支名 强制推送到远程仓库(不建议熟练使用,有可能覆盖别人的)
      • git push --set-upstream 远程仓库名 本地分支名(省略形式为:git push -u origin master)将本地的master分支推送到origin主机
      • git remote show 远程仓库名 查看某个远程仓库
      • git remote rename 旧远程仓库名 新远程仓库名 重命名远程仓库
      • git remote remove 远程仓库名 移除远程仓库(一旦你使用这种方式删除了一个远程仓库,那么所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除)

    Git 分支

    • git branch 显示所有分支
    • git branch 新分支名 创建新分支(创建 一个新分支,并不会自动切换到新分支中去)
    • git checkout -b 新分支名 创建新分支并切换过去(创建 一个新分支,自动切换到新分支中去)
    • git log --oneline --decorate 查看各个分支当前所指的对象
    • git checkout 分支名 切换分支
    • git log --oneline --decorate --graph --all 显示提交历史、各个分支的指向以及项目的分支分叉情况。
    • git branch -v 查看每一个分支的最后一次提交
    • git branch -vv 将所有的本地分支列出来并且包含更多的信息
      iss53     7e424c3 [origin/iss53: ahead 2] forgot the brackets
      master    1ae2a45 [origin/master] deploying index fix
      * serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
      testing   5ea463a trying something new
      

      这里可以看到 iss53 分支正在跟踪 origin/iss53 并且 “ahead” 是 2,意味着本地有两个提交还没有推送到服务器上。 也能看到 master 分支正在跟踪 origin/master 分支并且是最新的。 接下来可以看到 serverfix 分支正在跟踪 teamone 服务器上的 server-fix-good 分支并且领先 3 落后 1, 意味着服务器上有一次提交还没有合并入同时本地有三次提交还没有推送。 最后看到 testing 分支并没有跟踪任何远程分支。
      需要重点注意的一点是这些数字的值来自于你从每个服务器上最后一次抓取的数据。 这个命令并没有连接服务器,它只会告诉你关于本地缓存的服务器数据。 如果想要统计最新的领先与落后数字,需要在运行此命令前抓取所有的远程仓库。 可以像这样做:

      git fetch --all; git branch -vv
      
    • git branch --no-merged 查看所有包含未合并工作的分支
    • git branch --no-merged 分支名 查看未合并到 分支名 的分支
    • git checkout -b 本地分支名 远程仓库名/远程分支名 检出远程分支分支到本地分支
    • git push 远程仓库名 本地分支名:远程分支名 本地分支推送到远程分支(远程没有这个分支的情况)

    删除提交记录

    • git reset --hard 提交记录hash6位 切换当前分支到指定提交记录
    • git push 远程仓库名 HEAD --force 将当前分支记录设置为 HEAD

    分支合并

    • git merge 被合并分支名 将被合并分支合并到当前分支

    无冲突合并

    • 没有冲突就会自动合并并创建一个新的分支,有冲突就会停下来等待解决分支

    有冲突合并解决

    • 存在冲突可以通过 git status 查看冲突文件
      1. 冲突会显示到文件中,冲突地方通过 === 号进行分割,对应 <<< HEAD 是当前分支,>>> beihebing 是被合并分支
        <<<<<<< HEAD
        =======
        第零行
        第一行
        第二行
        第三行
        >>>>>>> beihebing
        
      2. git mergetool 可视化工具解决分支合并问题(可选的工具列表 opendiff(默认) kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc codecompare smerge emerge vimdiff nvimdiff)
      3. 合并完毕后通过 git add filename 表明冲突已解决,然后 git commit 命令提交即可
    • git reset --merge 中止合并
    • git merge --abort 恢复到你运行合并前的状态,但当运行命令前,在工作目录中有未储藏、未提交的修改时它不能完美处理

    其他及远程分支

    • git branch --merged 查看哪些分支已经合并到当前分支
    • git branch -d 分支名 删除指定分支(删除指定分支的所有信息)
    • git branch -D 分支名 强制删除指定分支(同上)
    • git push 远程仓库名 远程仓库分支名 将本地当前分支推送到远程仓库的分支中
    • 跟踪分支
      1. git checkout --track 远程仓库名/远程分支名 当前分支自动跟踪远程分支(设置之后 git pull 自动拉取合并设置的这个远程分支,默认 git clone 会自动地创建一个跟踪 远程仓库名/master 的 master 分支)
      2. git checkout -b 本地指定分支名 远程仓库名/远程分支名 (将本地分支与远程分支设置为不同的名字)
      3. git branch -u 远程仓库名/远程分支名 (没懂 设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支)
    • git push 远程仓库名 --delete 要删除分支名 删除远程分支(远程仓库名为git remote add 仓库名 仓库地址 添加的仓库名)

    变基(危险)

    如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。

    • git rebase 目标分支 变基:将提交到某一分支上的所有修改都移至另一分支上(将当前分支合并到目标分支,git merge功能相同,但是提交历史更干净整洁)

      示例: 切换到 experiment 分支,并将 experiment 修改转移到 master 分支上去

      git checkout experiment
      git rebase master
      
    • git rebase --onto master server client 高级变基

      参考: https://git-scm.com/book/zh/v2/Git-分支-变基
      “取出 client 分支,找出它从 server 分支分歧之后的补丁, 然后把这些补丁在 master 分支上重放一遍,让 client 看起来像直接基于 master 修改一样”。这理解起来有一点复杂,不过效果非常酷。

    特殊文件

    • .gitignore 声明要忽略的文件、文件夹列表(一行就代表一项要忽略的项目,支持正则)
  • 相关阅读:
    微信·小程序开发工具安装指南及注意事项
    测试
    PC上面的蓝牙的通信(C#)
    关于图片在div中居中问题
    JSONP---跨域请求问题
    关于position的用法
    APICloud自学笔记总结1
    前端html5
    关于图片自适应div大小问题
    亲身经历——大体量公司能为程序员的生涯带来什么帮助?
  • 原文地址:https://www.cnblogs.com/xiaqiuchu/p/15924092.html
Copyright © 2020-2023  润新知