zoukankan      html  css  js  c++  java
  • Git使用手册

    Git思维导图

    Linux 常用命令

    pwd 查看当前文件路径

    • mkdir 创建目录、touch 新建文件、rm 删除文件
    • 查看 readme.txt 文件内容
      cat readme.txt
    • r 就是向下递归,不管有多少级目录,一并删除 ; -f 就是直接强行删除,不作任何提示的意思

    删除目录和目录下所有文件 rm -rf [dir] ; 删除文件 rm -f xxx.log

    配置基本信息
    • 当前PC下所有Git仓库都会使用如下配置,也可以对某个仓库指定不同的用户和邮箱
      git config --global user.name "changbao"
      git config --global user.email "1772664927@qq.com"
    • 使当前目录变成git仓库,生成.git目录
      git init
    设置代理
    • 设置代理
      git config --global http.proxy http://proxy.com:1234
      git config --global https.proxy http://proxy.com:1234
      git config --global http.sslverify false

    • 禁用代理
      git config --global --unset http.proxy
      git config --global --unset https.proxy

    • 检查当前代理
      git config --global --get http.proxy
      git config --global --get https.proxy

    版本回退

    git reset --hard HEAD^

    git reset --hard HEAD^^

    git reset --hard HEAD^^^

    git reset --hard HEAD~100

    Tips : 先用 git reflog 查看版本号
    eg: 435ccc9 HEAD@{2}:commit:增加666
    再执行 git reset --hard 版本号(435ccc9)

    工作区与暂存区
    • 工作区:操作文件的目录;
    • 版本库:工作区中的 .git 隐藏目录,它不属于工作区。其中最重要的就是
      stage(暂存区)。还有git自动创建的第一个分支master,以及指向master'的一个
      指针HEAD。
    增加/删除文件
    • 添加指定文件到 暂存区
      git add file1 file2 ...
    • 添加指定目录到 暂存区
      git add [dir]
    • 添加当前目录所有文件到 暂存区
      git add .
    • 添加每个变化前,都会要求确认
    • 对于同一个文件的多处变化,可以实现分次提交
      git add -p
    • 把文件同时从删除 工作区 和 暂存区删除
      git rm file1 file2
    • 停止追踪指定文件,但该文件会保留在 工作区
      git rm --cached file
    • 改名文件,并且将这个文件放入暂存区
      git mv oldFile newFile
    代码提交
    • 提交暂存区到仓库区并添加注释
      git commit -m "提交 readme.txt"
    • 提交暂存区指定文件到仓库区
      git commit file1 file2 ... -m "提交file1和file2"
    • 提交工作区自上次commit之后的变化,直接到仓库区
      git commit -a
    • 提交时显示所有diff信息
      git commit -v
    • 使用一次新的commit,替代上一次提交 ? what ?
    • 如果代码没有任何新的变化,则用来改写上一次commit的提交信息
      git commit --amend -m "提交啦"
    • 重做上一次commit,并包括指定文件的变化
      git commit --amend file1 file2
    分支
    • 创建并切换分支
      git checkout -b dev
    • 列出所有本地分支
      git branch
    • 列出所有远程分支
      git branch -r
    • 列出所有本地分支 + 远程分支
      git branch -a
    • 切换分支,并更新工作区
      git checkout dev
    • 新建分支,但依然停留在当前分支
      git branch feature/001
    • 新建分支,并切换到该分支
      git checkout -b feature/001
    • 新建一个分支,指定提交:
      git branch [branch] [commit]
    • 新建一个分支,与指定的远程分支建立追踪关系 ※

      git branch --track [branch] [remote-branch]
    • 建立追踪关系,在现有分支与指定的远程分支之间 ※

      git branch --set-upstream dev origin/dev
    • 切换到上一分支
      git checkout -
    • 选择一个commit,合并进当前分支
      git cherry-pick [commit]
    • 删除分支
      git branch -d feature/001
    • 删除远程分支

      git push origin --delete feature/001

      git branch -dr feature/001
    • 在master上合并dev分支的内容
      git merge dev
      git branch -d dev
    • 终止 merge
      git merge --abort
    • 分支管理策略

    通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff 来禁用”Fast forward”模式。

    git merge --no-ff -m "merge with no-ff" dev

    git branch -d dev 最后在查看历史记录,发现被删除的分支信息还在

    • 查看历史记录

      git log --graph ;
      git log --graph --pretty=oneline --abbrev-commit
    • bug分支、stash功能
      git stash
    • 查看stash记录
      git stash list
    • 恢复/删除
      git stash apply 恢复,git stash drop 删除 ,git stash pop 恢复+删除

    刚才执行了 git stash 命令,把之前写的东西隐藏了起来,现在去创建新的 issue-404 分支修复bug,然后再把内容恢复回来。

    标签Tag (略)
    查看记录
    • 显示有变更的文件,commit之前之后都调一次
      git status
    • 显示当前分支的版本历史
      git log
    • 显示commit历史,以及每次commit发生变更的文件
      git log --stat
    • 根据关键字搜索提交历史
      git log -S [keyword]
    • 显示某个文件的版本历史,包括文件改名
      git log --follow file1 ;
      git whatchanged file1
    • 查看对 readme.txt 文件修改的历史记录,从近到远显示日志
      git log
      git log --pretty=oneline
      显示最近五次提交

      git log -5 --pretty=oneline 等价于 git log -5 --pretty --oneline
    • 显示指定文件是什么人在什么时间修改过
      git blame file1
    • 显示暂存区和工作区的差异
      git diff
    • 查看 readme.txt 改变了哪些内容
      git diff readme.txt
    • 显示工作区与当前分支最新commit之间的差异
      git diff HEAD
    • 显示今天你写了多少行代码
      git diff --shortstat "@{0 day ago}"
    • 显示当前分支的最近几次提交
      git reflog
    远程同步
    • 下载远程仓库的所有变动
      git fetch [remote]
    • 显示所有远程仓库
      git remote -v
    • 显示某个远程仓库的信息 - ?失败?
      git remote show [remote]
    • 增加新的远程仓库,并命名
      git remote add feature/001 xxx.git
    • 取回远程仓库的变化,并与本地分支合并
      git pull origin dev
    • 上传本地分支到远程
      git push origin dev
    • 强行推送当前分支到远程仓库,即使有冲突
      git push origin --force
    • 推送所有分支到远程仓库
      git push [remote] --all
      git push origin --all
    撤销修改
    • 恢复暂存区的指定文件到工作区
      git checkout -- file1
    • 恢复暂存区所有文件到工作区
      git checkout .
    • 重置暂存区与工作区,与上一次commit保持一致
      git reset --hard
    • 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
      git reset --hard [commit]
    • 重置当前HEAD为指定commit,但保持暂存区和工作区不变
      git reset --keep [commit]
    • 新建一个commit,用来撤销指定commit
    • 后者的所有变化都将被前者抵消,并且应用到当前分支
      git revert [commit]

    当 readme.txt 文件中有问题未提交之前,git status 命令提示的两种方法:

    1. 直接修改文件内容,add/commit;
    2. git checkout -- readme.txt 会丢弃掉工作区的修改,优先从 暂存区 里拿
      • readme.txt自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。
      • 另外一种是readme.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。
    删除文件

    touch b.md -> git add b.md -> git commit -m "Add b.md" -> rm b.md
    -> git status 显示 deleted: b.md
    此时b.md已从工作区删除但仍存在于stage(暂存区),可通过:

    • 恢复文件到工作区
      git checkout -- b.md 恢复文件到工作区
      如果从暂存区删除,在rm 之后调用 : git commit - a 之后会提示提交 message的vim窗口。或者:git commit -a -m "重命名 Git常用命令.md"

    • git清除本地缓存(改变成未track状态),然后再提交:
      git rm -r --cached .

    • 删除多提交的目录,比如.idea,build文件夹:

    $ git pull origin master 将远程仓库里面的项目拉下来
    $ dir  查看有哪些文件夹
    $ git rm -r --cached .idea  删除.idea文件夹
    $ git commit -m '删除了.idea'  提交,添加操作说明
    $ git push -u origin master 将本次更改更新到github项目上去
      操作完成.
    
    多人协作
    • 查看远程仓库信息
      git remote 加上 -v 查看详细信息
    • 创建本地dev分支 + 从远程检出dev分支

      git checkout -b dev origin/dev
      修改内容后 git pull origin dev , git push origin dev
    • git pull 失败,可能是没有指定本地dev分支与远程origin/dev分支的链接,根据提示
      设置dev origin/dev 的链接:

      git branch --set-upstream dev origin/dev ;
      git pull
    如果GitHub上新建的仓库为空
    目前,在GitHub上的这个testgit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
    

    现在,我们根据GitHub的提示,在本地的testgit仓库下运行命令:
    git remote add origin https://github.com/javakam/gitpractice.git

    把本地仓库的 master 分支推到远程仓库 ,第一次加上 -u
    由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    

    git push -u origin master

    git库所在的文件夹中的文件大致有4种状态
    • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

    • Unmodify:
      文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,
      而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

    • Modified:
      文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态,
      使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

    • Staged:
      暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态.
      执行git reset HEAD filename取消暂存, 文件状态为Modified

    • Git 状态 untracked 和 not staged的区别

    1. untrack 表示是新文件,没有被add过,是为跟踪的意思。
    2. not staged 表示add过的文件,即跟踪文件,再次修改没有add,就是没有暂存的意思
    每次开发完新feature之后

    git pull origin develop

    git push origin feature/dialog

    After PR merged :

    git branch -dr feature/dialog

    push之后,GitHub上会有黄色提示窗提示Pull Request,提完PR后如果没问题,
    直接merge,若需要review时候,可直接在review上修改,也可以在IDE上修改之后
    再次执行上面的拉取和推送操作,此时不会创建新的PR。

    参考链接 Git 傻瓜教程
  • 相关阅读:
    常用、好用的资源管理器收藏
    单片机延时函数整理——针对裸机
    ad7793的调试记录
    《80c51单片机实用技术》邹久朋学习笔记
    使用串口工具(volt++ vofa)伏特加来实时打印波形
    golang从简单的即时聊天来看架构演变
    无敌简单快速的文件服务器sgfs
    到底是否应该使用“微服务架构”?
    你所学习的设计模式到底有什么用?到底怎么用?
    浅入深出ETCD之【raft原理】
  • 原文地址:https://www.cnblogs.com/jooy/p/13820349.html
Copyright © 2011-2022 走看看