git 复习笔记

工作目录 -> (git add) -> 暂存区 -> (git commit) -> 版本库

重新复习 git 的笔记,仅仅是记录了一些我常使用图形化工具而忘记的命
令(不是全部),以便日后查用。

心得:多用 git status,不知道该咋办的时候就 status 一下看看

git config 相关

git config --global user.name 'your name':配置用户名

git config --global user.email 'your email':配置邮箱

config 的三个作用域,缺省等于local:

  • local:只对某个仓库有效
  • global:对当前用户所有仓库有效
  • system:对系统所有登录的用户有效

git config --list --local:显示config的配置

git add 相关

git add -u: 将已经被git管理的文件的改动提交到暂存区.

给文件重命名的简洁办法

方法1(不推荐):在工作目录直接修改文件名。

此时执行命令 git status ,结果为 :

认为是先删除了原文件,然后新增了一个新文件。现在要把新改的文件名提交到暂存区的操作是:

  1. git add <新文件名>

  2. git rm <原文件名>

    这样才算完成重命名的操作。

add 操作完成之后执行 status 命令,git 能智能识别出这是一个重命名的操作。

在这里插入图片描述

方法2(推荐):

git mv <文件名> <新文件名>

在这里插入图片描述

mv 之后的物理磁盘上的文件名称就已经改变了,同时这次改变也被 add 到了暂存区,此时如果需要提交,只执行 commit 命令就可以了。

git log 相关用法

  • git log:会把当前分支提交相关的 commit id,作者,时间,提交注释信息等都展示出来。

在这里插入图片描述

  • git log --oneline:简洁信息,一行展示出id和提交注释信息。

在这里插入图片描述

  • git log -n2 --oneline:-n2代表只看最新的两条,要看5条就是-n5
  • git log --all:显示所有分支的提交信息。

在这里插入图片描述

  • git log --all --graph:图形化显示所有提交历史,能清晰的表现出各个分支的演进信息。

在这里插入图片描述

  • git log 分支名:查看制定分支的提交记录

在这里插入图片描述

以上这些命令关键字都是可以组合使用的。

Author 和 Committer 的概念

比方说你想把某个分支张三的某次提交合并进master分支,此时author就是张三,committer就是你。

分离头指针

指的是某些变更没有基于任何一个 branch ,所以当你进行分支切换时,在分离头指针的情况下的commit很有可能会丢失。此时.git/HEAD 文件指向的是某个 commit id,而不是分支。

会造成分离头指针的情况,比如:git checkout <commit id>

在这里插入图片描述

此时如果在当前情况下作了 commit,继后切换到其它分支,git log 是查看不到在分离头指针情况下作的任何 commit。(ps:当在分离头指针情况下切换到其它分支时,git 会提示将修改保存至某个分支)

修改最新 commit 的 message

git commit --amend

仅限于对自己的分支或本地分支更改,如果分支已经也被其它同事使用,则谨慎操作,可能会对其它同事造成影响。

修改老旧 commit 的 message

在这里插入图片描述

例如我们现在想把红框内的内容改成 change something,则需要用到变基(rebase)命令,我们要修改的是b commit,那么它的就是a commit,所以变基命令要操作的对象就应该是a commit:

git rebase -i 015f8bc2c1dc,操作的commit id。

之后会弹出一个交互信息:

在这里插入图片描述

仔细阅读注释内信息得知,我们需要的操作的reword,应用操作,但是修改 commit message:

在这里插入图片描述

保存退出。然后git会自动弹出另一个交互界面:

在这里插入图片描述

此时修改 message 为你需要的信息,然后保存退出即可。

在这里插入图片描述

仔细观察发现之后的commit id 全部发生了改变,所以次操作不适合在已经与同事共用的分支上操作。

仅限于对自己的分支或本地分支更改,如果分支已经也被其它同事使用,则谨慎操作,可能会对其它同事造成影响。

将连续的几个 commit 合并为一个

在这里插入图片描述

要用到 git 的变基命令,要合并的是b和c,那它们的是a:

git rebase -i 135633609e750,操作的commit id。

敲入命令回车,自动弹出如下界面:

在这里插入图片描述

看注释发现我们需要的命令是 squash:

在这里插入图片描述

保存退出。然后自动弹出另一个窗口:

在这里插入图片描述

合并成功:

在这里插入图片描述

此操作会导致合并的 commit 和该条之后的 commit 的 id 都会改变,所以还是建议只在自己的分支或者本地分支进行操作,以免影响到其他同事。

比较暂存区和HEAD的差异

就是暂存区和当前分支最新的以此commit之间的差异。

git diff --cached

比较工作区和暂存区的差异

git diff -- <file naem>: 不加 – filename 就默认所有。

将暂存区恢复成和HEAD一样

git reset HEAD -- <文件名>... 就是取消暂存

比如说add了某些代码,然后在本地改动这部分代码发现更好的实现方式,则可以将暂存区取消,add 新的代码。

将工作区的文件恢复到和暂存区一样

git checkout -- <file>..

消除最近的几次 commit

git reset --hard <commit id or HEAD>:即把工作区和暂存区恢复到某个commit的状态。

删除文件

git rm filename

执行完工作区的文件就被删了,然后暂存区有了一条deleted的记录。

stash命令

场景:开发中临时加塞了其它任务

git stash :将当前工作区和暂存区的内容全部暂存起来,恢复到和HEAD一样的状态。

git stash apply:将 stash 栈顶的内容应用到当前,栈顶内容不弹出。

git stash pop:将 stash 栈顶的内容应用到当前,栈顶内容弹出。

向 github/gitee 添加 ssh 公钥

先检查电脑是不是已经生成过公私钥信息,如果已经生成过直接用就行。

具体操作参考 github help 页:https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

remote

git remote -v:列出远程仓库的信息。

git remote add <自己设置一个远程主机名> <url>,添加一个远程仓库关联,比如git remote add gitee-git-learn git@gitee.com:xxx/xxx.git

push

git push <remote时设置的远程主机名> <本地分支名,或者--all指定所有分支>

git push -u <主机名> <分支名>如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push

参考:https://www.cnblogs.com/qianqiannian/p/6008140.html

fetch 和 pull

fetch是单纯地把远程分支拉到本地;pull则在把远程分支拉到本地之外,还将对应分支做了一个 merge 操作。

fetch

在这里插入图片描述

上图是只fetch操作的情况,该远程分支生成了一个新树,没有和其它分支树关联。

然后 merge 一下看看,

在这里插入图片描述

报错拒绝合并不相关的历史,因为我们看fetch时的图,的确是两个不相关的树。

git merge -h找到我们需要用的参数:

在这里插入图片描述

--allow-unrelated-histories:允许不相关的历史合并。键入命令后回车弹出窗口输入合并原因(一般缺省值就可以),合并完成。

checkout

git checkout -b <本地分支名> <远端分支名>:基于远端分支创建一个本地分支,并切换到该分支。

多人把同一文件改成了不同文件名如何处理

场景:

用户A把index.html改成了index1.html;

用户B把index.html改成了index2.html并且先一步先一步提交了;

此时用户A提交报错,因为本地不是fast-forward,需要先pull;

pull之后提示冲突:

在这里插入图片描述

并且工作区间出现两个文件:

在这里插入图片描述

此时git status 如下:

在这里插入图片描述

和同事协商后文件名改为index1.htm,依照提示进行如下操作:

git rm index.htm
git rm index2.htm
git add index1.htm
git commit ...
// 及时的推送到远端
git push ...

禁止使用push -f 操作

禁止对集成分支进行变基操作

XaRcRQ-1585799240050)]

此时git status 如下:

[外链图片转存中…(img-SldcbhQ9-1585799240051)]

和同事协商后文件名改为index1.htm,依照提示进行如下操作:

git rm index.htm
git rm index2.htm
git add index1.htm
git commit ...
// 及时的推送到远端
git push ...

禁止使用push -f 操作

禁止对集成分支进行变基操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值