深入理解git 使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/engineer_james/article/details/82314766

作为一个4年的程序员,很多基础一知半解,很惭愧.想来想去,自己后知后觉,到毕业一段时间,才知道这个行业比较适合我.

选择将git 整理一番,磨刀不误砍柴工嘛.
参考书籍 https://git-scm.com/book/zh/v2

首先是clone 一个项目

  • git clone
git clone git@xxxxxxxxxxxx.git

这里写图片描述

  • git status

然后修改文件 index.md git 马上会发现和之前提交到git的文件差异(命令 git status)
这里写图片描述

  • git diff
    此时想看详细的差异内容(命令 git diff)
    这里写图片描述

  • git add
    然后提交差异的内容到 git 暂存区 git add . 或者文件 index.md
    这里写图片描述
    再次git status 查看,差异的内容变成绿色了,这时候,再次使用命令 git diff ,什么也不显示,但是用
    git diff – staged 显示了刚刚修改的内容

  • git commit
    https://blog.csdn.net/engineer_james/article/details/80866842

因此,git diff 比较的是本地修改和暂存的区差异(如果没有暂存内容,就和已经提交的内容比较)
git diff –staged 比较的是 暂存区的内容和 已经提交的内容

如果此时发现 不需要这个修改,需要将暂存区的内容,恢复,就用(命令 git reset )
这里写图片描述
再次用git status 发现index.md 依然变成红色,变成了本地修改
PS: 如果有多个修改文件进入了暂存区,只想回撤一个文件的修改,那么可以使用

git reset HEAD <file>...
  • git rm && git mv
    在git 中删除文件和移动文件 git rm index.md 或者 git mv index.md indexbk.md 和linux 差不多

  • git log
    关于 git log 教程中有很多参数,但是我之喜欢用 git log 不带参数, 或者干脆 直接gitk 图形化界面,直接看commit 记录

  • git checkout
    如果本地修改了文件,但是改乱了,现在想恢复到初始状态,就需要用 (当你使用 git status 会提示你)

git checkout <file>   或者 git checkout .
  • git branch
    如果使用 git branch -a
    这里写图片描述
    可以看出 远程服务器是origin ,他的head 指向 远程仓库 master 分支,而本地分支是master,(使用git branch 就可以知道)

  • git remote
    使用git remote -v 就可以知道远程分支的fetch 和 push 地址
    这里写图片描述

  • git fetch [remote-name]
    如果想在提交代码前更新本地的代码,可以使用git fetch origin ,但是更新,并不会把合并到本地的代码,需要手动合并
    但是 git merge 是合并操作
    git fetch + git merge = git pull
    这里还有一篇写的不错 https://blog.csdn.net/qq_36113598/article/details/78906882

  • git push [remote-name] [branch-name]
    commit 后,可以通过 git push origin master 将本地master 分支提交到 origin 仓库

  • git remote show [remote-name]
    这里写图片描述
    查看远程仓库信息,可以看到 fetch 和 push 地址, head 分支是master 并且 track 远程master 分支,已经更新到最新

  • 分支创建

git branch  <branch-name> 
git checkout -b <branch-name> //创建分支,并且切换过去
git checkout <branch-name> //切换分支
  • git merge
    合并 a 分支到 master 分支
git checkout master  //首先切换到 master 分支
git merge a  //最后,合并a 分支到master 分支 

上面是没有冲突的情况
但是一旦出现冲突,例子中,就需要手动解决 ==== 分割线上面和下面有冲突

<<<<<<< HEAD:index.html
<div id="footer">contact : [email protected]</div>
=======
<div id="footer">
 please contact us at [email protected]
</div>
>>>>>>> iss53:index.html
  • 跟踪远程分支
git checkout -b [branch] [remotename]/[branch] 
git checkout --track origin/master
git branch -u origin/master
git branch -vv

可以知道多有分支跟踪远程分支的情况

  • git rebase
git checkout a
git rebase master //git rebase 到目的分支 ,但是此时 head 在a 分支
git checkout master //head 在master 分支
git merge a//a 合并到 master ,此时master 分支在最前面

详细看 https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA
最后提交历史变成直线,没有分叉

  • git format-patch
git format-patch -1 <commit id>  单独commit 的patch
git format-patch <commit id> 不包含当前commit 以来的提交分别生成patch
git format-patch <commit id1>..<commit idn> commit id 之间的patch 分别列出来

这里写图片描述

  • git apply
git apply --check 0001-xxxx-fix.patch //检查能否正确应用patch
git apply 0001-xxxx-fix.patch //应用patch
  • git cherry-pick
    如果不想变基即 rebase,那么就用cherry-pick,
    特性分支中的某个提交,或者特性分支中只有一个提交,而你不想运行变基时很有用
    可以将某特性分支的某一个commit 应用到当前分支,创建的时间点,不一样
git cherry-pick e43a6fd3e94888d76779ad79fb568ed180e5fcdf
  • git show
使用 git show <commit id> 

查看某一commit id 的内容

还有很多git 高级用法,在android 源码开发的时候会遇到 比如
HEAD:refs/for/mybranch和refs/heads/mybranch 区别

猜你喜欢

转载自blog.csdn.net/engineer_james/article/details/82314766