##git
最基本的操作就是gst ->git add . ->git commit -m"" ->git push ->gst
但是往往事情没有那么顺利,比如git add以后我要撤销怎么办
具体修改了什么代码
git diff —>比较的是工作目录中当前文件和暂存区域快照之间的差异
git diff –staged —>比较已经暂存起来的文件和上次提交时的快照之间的差异
git commit -a -m “”—>其中-a是add .的作用
git log -p -2 —>-p是展开每个版本的不同点,-2是最近2次
git checkout主要有三个作用:
- 第一个就是切换分支。例如你从远程仓库clone下来所有的源代码,你git branch一下会看到你通常是在master,如果你想切换到某一个分支上呢?git checkout
- 第二个就是放弃对某个文件的修改。例如你想放弃对某个文件Hello.cpp的修改,git checkout – <Hello.cpp>//回到上个版本
- 第三个就是新建一个分支,git checkout <-b>
,不加-b的话只新建不切换到新的分支上,加-b新建并切换到该分支上 git reset主要是取消上一次的操作,具体用法有很多:
- 第一个取消merge,git reset –hard ORIG_HEAD,这样会退回到merge前的代码。
- 第二个是将文件从stage(缓存区)中移除,git reset HEAD
忽略某些文件 - 第三个就是取消commit,git reset HEAD~
<-soft/-hard>,取消上num次的commit .将你当前的改动从缓存区中移除,但是这些改动还留在工作目录中 git reset --mixed HEAD
如果你想完全舍弃你没有提交的改动,你可以使用git reset --hard HEAD
git revert 撤销一个提交的同时会创建一个新的提交
你也可以把 git revert 当作撤销已经提交的更改,而 git reset HEAD 用来撤销没有提交的更改。
[image:72F89E7D-B0C1-47A0-B2CC-1762EB05968A-26007-00004B3EC747D25B/BEAF033D-F9E6-4393-B4C6-0BF330F0AB4A.png]
远程仓库git remote
- git fetch [remote-name]:此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。不像git pull 只是把当前分支的代码拉下来,而是拉整个仓库的数据。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。
- 实际上,默认情况下 git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。所以一般我们运行 git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。
- git push [origin master]:把本地缓存区的代码推送的远程仓库.
- 查看远程仓库信息git remote show [remote-name]:除了对应的克隆地址外,它还给出了许多额外的信息。它友善地告诉你如果是在 master 分支,就可以用 git pull 命令抓取数据合并到本地。另外还列出了所有处于跟踪状态中的远端分支。
打标签git tag
- 不含标注用 -l 含标注用- a -m后面带注释.
查看相应标签的版本信息git show
代码合并
merge和 rebase 所做的事其实是一样的,都是把两个分支合并,不过rebase 是变基而 merge 是真正的合并,这对后期查看分支有一定的影响.
所以,在你运行 git rebase 之前,一定要问问你自己「有没有别人正在这个分支上工作?」。如果答案是肯定的,那么把你的爪子放回去,重新找到一个无害的方式(如 git revert)来提交你的更改。不然的话,你可以随心所欲地重写历史。
当你理解 rebase 是什么的时候,最重要的就是什么时候 不能 用 rebase。git rebase 的黄金法则便是,绝不要在公共的分支上使用它。
忽略一些文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。来看一个实际的例子:
我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。来看一个实际的例子:
1 | $ cat .gitignore |
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。
文件 .gitignore 的格式规范如下:
所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
可以使用标准的 glob 模式匹配。
匹配模式最后跟反斜杠(/)说明要忽略的是目录。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
我们再看一个 .gitignore 文件的例子:
1 | # 此为注释 – 将被 Git 忽略 |