基础
Repository 仓库
Checkout 检出

Remote不过是分布式系统的一个节点,姑且叫做remote。
命令
git config
几种粒度
- --system 所有用户
- git config --system --list --show-origin 查看配置文件路径
- --global ~/.gitconfig
- --local 当前仓库
git init
git clone [url]
- ssh:ssh-keygen -t rsa -C "email@example.com"
- ~/.ssh/id_rsa or id_rsa.pub
- -t type, -c comment
git add
- file1 file2 ...
- directory
- . 表示全部
git status
git diff
-
暂存区有时,比较工作区与暂存区,暂存区无时,比较工作区与最后一次commit的版本库
-
--cached/--staged 比较暂存区与最后一次commit的版本库
……
git commit
- -m 带上commit info
- -a - m 跳过add,直接commit
- commit info修改
- 最后一次,git commit --amend,编辑保存
- 前面某次
- git rebase -i HEAD~n
- pick --> edit
- git commit --amend 编辑 git rebase --continue,如此反复
git log
- --oneline 精简版
- -p -3 p-patch,具体哪些文件变更
git remote
- 默认名称为origin
- -v remote url
- add remote-name remote-url
- show remote-name
- rename old new
- rm remote name
git push
- remote-name brach-name 分支名相同时
- remote-name [local-branch]:remote-branch local-branch为空时表示删除远端分支
git rm
- 无参数时,删除工作区某文件,类似shell的rm
- cached 工作区和暂存区都删除
git stash
- save 'message',stash工作区和暂存区所有修改(untrack无法暂存)
- list statsh列表
- apply/pop 最后一次stash 都恢复到工作区,pop会删除stash
- apply/pop --index 恢复到工作区和暂存区,取决于stash时状态
- applypop stash@{n}
git branch
- xxname 创建分支
- -d xxname 删除分支
git checkout
- git checkout 检出分支
- git checkout -b 创建并检出
git merge
- remote-name/branch-name 合并远程分支到当前分支
git pull
- remote-name remote-branch:local-branch
- 是当前分支可以不要:local-branch
- git pull [--rebase] = git fetch + git merge/rebase,可能产生merge
- clone时所有本地分支都与远程同名分支建立了追踪关系,简写为git pull origin
- 默认远端为origin,简写为git pull
remote-name branch-name
- git fetch origin master 要拉取一个远程分支到本地,从哪拉?所以空格分开写
- git merge origin/master 将origin/master合并到当前分支,其实origin/master也不过是本地的一个分支而已所以不需要remote-name
- git push origin master 要推送到一个远端分支,推到哪?所以空格分开写
squash
- git rebase -i HEAD~n
- pick --> squash 最上面也即最后一次commit要pick
- git commit --amend 修改压缩提交的commit meesage
- git rebase --continue 执行压缩
git reset
- git reflog 查看md5
- --hard id 丢弃更改
- --soft id 更改会保留在暂存区
- id 更改会回到工作区
discard change
-
工作区
- git checkout -- xx/.
-
暂存区
-
git reset --hard HEAD [xx] 全部discard
-
git reset --soft HEAD [xx] 回到暂存区(无用?)
-
git reset HEAD [xx]暂存区回到工作区
-
git push
- -f 强推,远端reset?
git tag
- git tag -a x.x.x -m "xxmessage", git push origin --tags
- git tag -d x.x.x, git push origin :refs/tags/x.x.x
git cherry-pick
- commitid
- rebase/merge时不会产生重复提交
git format-patch
- HEAD^^ 最近两次commit打两个patch
- id1..id2 1-2差异patch,共一个
- -1 id1 某次commit打patch
- id1 id1到HEAD patch,多个
git apply
- --stat
- --check 是否能打,可能输出冲突
git am
- xx.patch 作者直接提交
- apply 只打在工作区,且可以接受diff文件
- /*.patch
- --abort
- --resolved
posted on
浙公网安备 33010602011771号