Git学习笔记

概述

在这里插入图片描述

命令合集

本地仓库

git init:初始化本地项目
git status:获取当前文件状态
** git clone** :克隆远程项目,同git init一样的作用,也是创建本地仓库,只不过git init是直接将本地项目作为本地仓库,而git clone是将远程项目克隆到本地并作为本地仓库。
git clone比git init多了一层远程仓库的含义
git add 文件名:这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。将这个 命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适
不加参数直接输入git diff:查看尚未暂存的文件更新了哪些部分,比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。(Git 1.6.1 及更高版本 还允许使用git diff --staged,效果是相同的,但更好记些。
提交更新:git commit -m “提交信息”,提交后的信息有:当前在哪个分支提交的,本次提交的完整SHA-1校验和是什么,以及在本次提交中,有多少文件修订过,多少行添加和删改过
git commit -a:可以跳过给git add步骤,自动把所有已经跟踪过的文件暂存起来一并提交
移除文件:git rm:从已跟踪文件清单中(确切的说是从暂存区域中)移除某文件
如果删除之前修改过并且已经放到暂存区域的话,必须使用-f 强制删除
改名: git rm resourcename targetname
查看提交历史:git log:按提交时间列出所有更新,最近的更新排在最上面,列出内容:每个提交的SHA-1校验和、作者名字、电子邮件地址、提交时间和提交说明
git log -p:显示每次提交的内容差异,git log -p -2:仅显示最近两次提交
git log --stat:显示每次提交的简略的统计信息
git log --pretty:指定不同的显示提交历史的格式,例如git log --pretty=oneline:将每次的提交当在一行显示
git log --pretty=format:定制要显示的记录格式
加粗样式
git log --pretty=format与–graph结合使用会很有用,可以形象展示分支、合并历史
在这里插入图片描述
在这里插入图片描述
限制输出:按时间做限制:git log --since=时间
按作者做限制:git log --auther=?
按提交说明中的关键字做限制:git log --grep,如果限制满足两个选项搜索条件的提交,必须用–all-match选项
限制添加或删除了某些字符串的提交:git log -S字符串
在这里插入图片描述
撤销操作:
$ git commit --amend:提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了使用此提交命令尝试重新提交;
这个命令会将暂存区中的文件提交。如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。
git checkout – [file]:撤消修改 - 将它还原成上次提交时的样子
为命令起别名:这里将checkout别名为co:git config --global alias.co checkout
又例如:此时git last就可以获取最后一次提交的日志了
在这里插入图片描述
git checkout -b branchname :创建并切换到分支

远程仓库

git remote: 查看已经配置的远程仓库
git remote add <shortname> <url> :添加一个新的远程Git仓库,同时指定一个你可以轻松引用的简写

git remote add guazi git@git.***.git

git remote -v :显示需要读写远程仓库使用的Git保存的简写与其对应的URL

guazi	git@git.***.git (fetch)
guazi	git@git.***.git (push)

git fetch [remote-name] :从远程仓库中获得数据,会访问远程仓库,从中拉取所有你还没有的数据。执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
如果使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。所 以,git fetch origin会抓取克隆(或上一次抓取)后新推送的所有工作。必须注意git fetch命令会将 数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。当准备好时你必须手动将其合并入你的工作。
git push [remote-name] [branch- name]:
1.对于本地来说,git 将本地仓库的指定分支推送到远程仓库的相应分支,同时更新了本地仓库的远程分支.
2.对于远程来说,git 接收到本地仓库的推送请求时应该在相应分支上合并本地分支,同时更新远程仓库的相应分支.
只要本地的指定分支成功推送到远程的相应分支时,对于本地来说,不论是指定分支还是远程分支(origin/master)都应该是最新状态,因为已经与服务器同步了.
而远程接收到此次推送请求时,应该尝试合并此次推送请求,再更新自己的相应分支,远程合并完成后再通知本地此次推送结果,如此一来,三端同步,皆大欢喜!
tips:只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。当你和其他人在同一时间 克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。你必须先将他们的工作拉取下 来并将其合并进你的工作后才能推送.
git pull:
1.对于远程来说,接收到本地的拉取请求时,因为没有新版本需要处理,所以无需任何操作.
2.对于本地来说,当远程仓库的相应分支下载到本地时应该更新远程分支状态,再尝试合并到本地的相应分支.

总结:
在这里插入图片描述

其他命令

git tag:列出已有的标签(以字母顺序)
git tag -l ['v1.8.5’]* :以特定的模式查找标签,这里是查找以v1.8.5开头的标签
git config 文件来轻松地为每一个命令设置一个别名。例如:

  $ git config --global alias.co checkout
  $ git config --global alias.br branch
  $ git config --global alias.ci commit
  $ git config --global alias.st status

git push origin --delete serverfix:删除一个远程分支,基本上这个命令做的是从服务器上移除这个指针。Git 服务器通常会保留数据一段时间直到垃圾回收运行,所 以如果不小心删除掉了,通常是很容易恢复的。
git rebase:(不要对在仓库外有副本的分支执行变基)采用merge时,采取的操作如下:
在这里插入图片描述
另一种操作可以提取在 C4 中引入的补丁和修改,然后在 C3 的基础上再应用一次。在 Git 中,这种 操作就叫做 变基。它的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master)的最近共同祖 先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目 标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。图解如下:
在这里插入图片描述
在此基础上,使用

git checkout master
git merge experiment

所达到的效果如下:
在这里插入图片描述
指明祖先提交:HEAD~或者HEAD^这两个都是只想第一父提交
例:git show HEAD~3:代表HEAD^^^,第一父提交的第一父提交的第一父提交
** git log master…experiment**:查看 experiment 分支中还有哪些提交尚未被合并入 master 分支。你可以使用 master…experiment 来让 Git 显示这些提交。也就是 “在 experiment 分支中而不在 master 分支中的提交”。
git log experiment…master:查看在 master 分支中而不在 experiment 分支中的提交
git reset:这个指令虽然可以用来撤销 commit ,但它的实质行为并不是撤销,而是移动 HEAD ,并且「捎带」上 HEAD 所指向的 branch(如果有的话)。也就是说,reset 这个指令的行为其实和它的字面意思 “reset”(重置)十分相符:它是用来重置 HEAD 以及它所指向的 branch 的位置的。
git reset --soft xxx 用于将文件提交至本地仓库后撤回暂存区的操作。
reset --hard HEAD^ :会将工作区、暂存区、本地仓库的所有提交的文件全都撤销(包括工作区文件,会删除),它起到了撤销 commit 的效果,是因为它把 HEAD 和它所指向的 branch 一起移动到了当前 commit 的父 commit 上,从而起到了「撤销」的效果。
git revert :是用一次新的commit来回滚之前的commit
git log # 得到你需要回退一次提交的commit id
git revert <commit_id> # 撤销指定的版本,撤销也会作为一次提交进行保存
git revert 和 git reset的区别

  • git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留;
  • git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除
    git stash 或git stash save : 想要切换分支,但是还不想要提交之前的工作;所以储藏修改。在这时,你能够轻易地切换分支并在其他地方工作,你的修改被存储到栈上。
    **git stash apply ** :将你刚刚储藏的工作重新应用。如果想要应用其中一个更旧的储藏,可以通过名字指定它,像这样:git stash apply stash@{2}。如果 不指定一个储藏,Git 认为指定的是最近的储藏。
    git stash branch [branchname]:如果储藏了一些工作,将它留在那儿了一会儿,然后继续在储藏的分支上工作,在重新应用工作时可能会有问 题。如果应用尝试修改刚刚修改的文件,你会得到一个合并冲突并不得不解决它。如果想要一个轻松的方式来再 次测试储藏的改动,可以运行git stash branch创建一个新分支,检出储藏工作时所在的提交,重新在那应 用工作,然后在应用成功后扔掉储藏

.gitignore文件

忽略文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文 件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。来看一个实际的例子:
$ cat .gitignore
*.[oa]
*~
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。第二行 告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件 .gitignore 的格式规范如下:
• 所有空行或者以 # 开头的行都会被 Git 忽略。 • 可以使用标准的 glob 模式匹配。
• 匹配模式可以以(/)开头防止递归。
• 匹配模式可以以(/)结尾指定目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号()匹配零个或多个任意字符;[abc] 匹配任 何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配 一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。使用两个星号() 表示匹配任意中间目录,比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。

工作流

https://www.cnblogs.com/softidea/p/4585647.html
https://mp.weixin.qq.com/s/aaKQd3hJOjGfOZbe-jLcMA

撤销操作

https://blog.csdn.net/dahaohan/article/details/50625466?utm_source=blogxgwz8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值