工具

git 相关随笔记录

2020-06-12  本文已影响0人  心_c2a2

如果不稳定分支有冲突无法合并,可以考虑切到 master 删除 test 分支(仅用于不需要在乎提交的不稳定分支) ,再在 master 分支输入 git pull --rebase,它会 同步所有远程分支到本地

git pull :拉取远程仓库代码

--rebase 将远程仓库的代码期间修改的代码全部合并到当前分支的结尾,这样 commit 会变成一条线,不会分叉(同时创建一个 commit 记录合并的记录),如果有冲突会停止 rebase,等解决冲突后调用 git add 将最终结果放入暂存区,再 git rebase --continue 继续合并

git pull --rebase = git fetch + git rebase
git pull = git fetch + git merge

git status:查看文件状态(详细)

-s 简单状态

git branch : 查看本地分支

-u origin/<远程分支> 关联当前本地分支到某个远程分支
-a 查看本地和远程的所有分支
-vv 查看本地分支对应的远程分支
-d <本地分支名> 删除某个本地分支

git log:查看当前分支的历史提交 (简略版)

-p 详细查看每个提交都修改了哪些代码
--stat 显示每次提交时,修改文件的简要修改信息(常用)
--grep=“xxx” 根据关键字搜索指定提交
--graph 显示图形界面
--author 指定作者
--all 显示所有分支的提交历史
gloga 所有分支提交的图形界面
glods 显示当前分支所有提交的图形界面
glods <文件名/分支名> 显示(涉及到目标文件/目标分支)的所有提交

git diff 比对并检查当前代码改动,默认为工作区和暂存区进行比较
--cached 暂存区和 git 仓库比较

git checkout <本地分支名>: 切换分支
-b <本地分支名> <origin/远程分支名> 本地没有分支则创建分支并切换
-- <文件名> 恢复被删除的文件,默认恢复成最新的远程分支中的当前文件

git merge <目标分支>: 合并目标分支到当前分支

--no-ff 不使用fast-forward方式合并,即使删除分支也可以保留分支的commit历史(推荐)

git remote -v :查看远程仓库地址

git stash clear: 清除所有 stash
git stash drop stashxxxxx: 删除第 xxx 的 stash
git stash show -p stash@{1}: 显示 stash@{1} 中详细改动
git stash save 'xxx" 将储藏命名为 xxx

git ls-files:查看暂存区文件信息(取消暂存直接点到指定文件然后回退即可)

--cached (简写 -c) 默认参数,显示所有暂存区文件
--deleted (简写 -d) 显示删除文件
--modified (简写 -m)显示修改过的文件

git rm: 删除文件

-r 递归删除

git remote prune origin :清除远程已经不存在但是本地还存在的分支

git push --force-with-lease: 较为安全的 git push --force,如果发现本地分支和此时的远程分支有不同则会先阻止推送,防止你冲掉其他人的代码

merge 和 rebase 的区别

rebase 类似与 merge ,它和 merge 不同的是

同时 rebase 会将分支变成一条整齐的线,取消了 merge commit

实际上是把解决分支补丁同最新主干代码之间冲突的责任,化转为由提交补丁的人来解决,合并到 master 时不需要管理者解决冲突了

reset 相关

重置本地分支到目标 commit 上,reset 包含三个参数

rebase 相关

由于 rebase 的源分支(执行 git rebase 命令的当前分支,并非 rebase 的目标分支)会基于目标分支进行重建,和当前的源分支不一样,所以必须使用 git push --force 才能提交到远程仓库

所以如果源分支是一个合作分支(其他开发者会在这个分支开发),不能进行 rebase,否则会将其他人的代码给覆盖掉(保险起见可以使用 git push --force-with-lease)

https://segmentfault.com/a/1190000005937408

使用 git rebase 时需要经常 rebase 即将合并到的那个分支,否则堆积很多 commit 再合并容易发生错误

merge 相关

如果 merge 含有冲突,需要手动解决冲突,其中 HEAD 表示当前分支,xxx 表示合并到当前分支到目标分支

<<<<<<< HEAD
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
  please contact us at support@github.com
</div>
>>>>>>> iss53

git merge 和 git cherr-pick 的区别

merge 不仅是改动的代码,没有改动的代码也会一起合并到当前分支

而 cherry-pick 只会将目标 commit 的改动合并到当前分支

git --rebase 和 git merge --no-ff 博客

合并多个 commit

输入 git rebase -i <hash> ,hash 应该是需要合并的 commit 之前的一个 commit

然后会弹出 vim 编辑器,里面会显示 ( hash ~ HEAD ] 之间的 commit 记录,并且 commit 记录的时间线是从上到下的(最下面的是最近的 commit)

image.png

将第一个单词 pick 改成 squash,就可以将 squash 后面的 commit 合并到上一个 commit 中

squash 的意思是当前这个 commit 会被合并到前一个commit

撤销指定提交

git revert <hash>: 撤销指定的提交
git revert -m <hash>: 撤销一个合并的提交(merge requeset),即撤销关于这个 merge 的所有提交

凭证存储(http 免密操作)

运行以下命令创建一个存储密码的文件
git config --global credential.helper store
接着会在 home(~)目录下生成一个 .gitconfig 的文件,保存密码

image.png

gitlab webhook


当 gitlab 触发些事件时,会向第一行中填入的 url 发送一个请求,请求可以指向你的服务器,可以为此添加一些额外功能,例如 LGFM ,自动合并,自动部署等

第二行的 token 可以自定义,可以添加鉴权功能

上一篇 下一篇

猜你喜欢

热点阅读