git push origin :[branch] 删除远程分支git rm -r --cached [file] 删除远程文件
feat: 新功能fix: 修复 bugtest: 增加/修改测试用例chore: 修改工具相关docs: 修改文档perf: 提升性能reflactor: 重构, 不影响当前逻辑style: 修改样式deps: 升级依赖
git remote -v 列出远程仓库 urlgit remote add [name] [url] 添加远程仓库 urlgit fetch [name] 拉取远程仓库最新代码git merge [name]/master 合并远程分支最新代码到本地
git pull
等价于 git fetch
和 git checkout -b
git merge
会多产生一次 merge 的 log 记录git rebase
会将主干新增的日志记录前置到当前分支之前以下都为 commit
了的情况, 下面对 --mixed
、--hard
、--soft
可以看到从上往下回复程度是在加强的。
使用场景: 在一个分支中拉取另外一个分支某一个 commit
或一段区间的 commit
git cherry-pick <commit id>git cherry-pick 371c2…971209 // (2,5]git cherry-pick 371c2^…971209 // [2,5]
美化 git 日志
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
查看文件修改内容
git lg -p
master
分支上使用 git reset --hard xxxxxx
;git checkout -b
创建 fix/xxx
分支, 在该分支上进行 bug 修复;master
分支, 可以使用 git reflog
查看之前 reset 过来的分支节点, 再执行 git reset --hard xxxxxx
回到那个节点。git merge --no-ff fix/xxx
选择一句话, 按 r 对该话进行引用回复。
如果是比较复杂的 Feature 可以在开发过程提 pr(标为 WIP), 这样子可以提早的指出问题代码。
当有人提了 pr
, 需要观察 pr 的代码是否存在问题。比如使用如下命令:
git remote add lanyincao git@github.com:snakeUni/snake-design.git
git reflog 可以查看所有分支的所有操作记录
输入 git branch
分支情况如下:
输入 git branch --merged
后查看已合并的分支
如何一键快速删除这些已合并的分支并删除远端的分支呢
参考此脚本, 后续跟进。
添加 tag:
git tag v0.1 // 本地推标签git push orgin v0.1 // 远端推标签
删除 tag:
git tag -d v0.1 // 删除本地标签git push origin :refs/tags/v0.1 // 删除远端标签
git 默认初始化的项目是不区分文件名大小写的, 可以执行下这行命令
git config core.ignorecase false
git diff xxx xxx > my.patch
the first step:
git filter-branch --force --index-filter \"git rm --cached --ignore-unmatch yarn.lock" \--prune-empty --tag-name-filter cat -- --all
the second step:
git push origin --force --all
ask for Contact GitHub Support or GitHub Premium Support, asking them to remove cached views and references to the sensitive data in pull requests on GitHub.
使用交互式 rebase 则有更多的功能,可以细致的操作每一条 commit,这样我们就能合并,修改 commit
git rebase -i [start-commit] [end-commit]# (start-commit, end-commit] 前开后闭区间,默认 end-commit 为当前 HEAD
for example
git rebase -i HEAD~4
1 pick 05a703d fix: 左右按键遇见 label 标签、加粗文字, 光标位置与预期不符2 s a716c1d fix: 修复 P0 报错34 # Rebase d974fa9..a716c1d onto d974fa9 (2 command(s))5 #6 # Commands:7 # p, pick = use commit8 # r, reword = use commit, but edit the commit message9 # e, edit = use commit, but stop for amending10 # s, squash = use commit, but meld into previous commit11 # f, fixup = like "squash", but discard this commit's log message12 # x, exec = run command (the rest of the line) using shell13 # d, drop = remove commit14 #15 # These lines can be re-ordered; they are executed from top to bottom.16 #17 # If you remove a line here THAT COMMIT WILL BE LOST.18 #19 # However, if you remove everything, the rebase will be aborted.20 #21 # Note that empty commits are commented out
删除不想保留的 commit。
1. git rebase -i <Earlier Commit>2. edit the commit info you want change from `pick` to `edit`3. git commit --amend --author="MuYunyun <328375795@qq.com>"4. git rebase --continue
$ git config --global user.name "Mona Lisa"$ git config --global user.name
$ git config user.name "MuYunyun"$ git config user.name$ git config user.email "328375795@qq.com"$ git config user.email
How to check the conflict of two branch, but not need to merge them?
git document:
--ff Do not generate a merge commit if the merge resolved as a fast-forward, only update the branch pointer. This is the default behavior.
-no-ff Generate a merge commit even if the merge resolved as a fast-forward.
--commit Perform the merge and commit the result. This option can be used to override --no-commit.
--no-commit With --no-commit perform the merge but pretend the merge failed and do not autocommit, to give the user a chance to inspect and further tweak the merge result before committing.
背景:git push、git pull、lerna publish 卡顿,报类似如下问题。
lerna ERR! fatal: unable to access 'https://github.com/MuYunyun/create-react-doc.git/': LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
用 git 内置代理,直接走系统中运行的代理工具中转,比如 SS 本地端口是 1080,那么可以如下方式走代理:
git config --global http.proxy socks5://127.0.0.1:1080git config --global https.proxy socks5://127.0.0.1:1080
停走代理:
git config --global http.proxy ""git config --global https.proxy ""