git 初级使用

Tags
sublimetextgit
Created
Jun 19, 2018 11:00 AM

git patch 或 git format-patch HEAD^ 导出补丁 / git am 或 git apply 应用

git-sparse-checkout 拉取一个子集(monorepo 中)

git commit --amend --reset-author --no-edit -S // 重置作者并添加签名

// 使用 ssh 签名 https://taoshu.in/git/ssh-sign.html

git config --global core.autocrlf false

gitflow: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow

// hotfix 分支合并到 master,同时也合并到 develop 分支,不要将 master 分支合并到 develop

git tag --list --sort=-v:refname "v*"

// git describe --all --match "v*" --abbrev=0 // 匹配有描述的最新 tag

所有修改都是新建分支,测完没问题再 Merge 到 develop,merge commit 的 message,写一下这个分支做了什么修改

.gitignore // 忽略文件

git add --force pkg // 单次添加忽略文件

git config --global push.default current // 设置push默认分支

git config 设置用户信息,git remote 设置远端 // 使用 ssh 时要用 ssh 协议链接远端,set-url 修改远端地址

git init(需要远端新建repo和本地执行remote add操作) 或 git clone 新建仓库

https://git-scm.com/book/zh/v2

工作流:工作目录,缓存区(index),HEAD

git submodule add https://github.com/chaconinc/DbConnector <path>

git submodule update --remote --init / git clone --recurse-submodules ...

先要add文件添加到缓存区。放弃修改git checkout -<file>

修改后提交更改 commit 到HEAD区

新添加上次漏掉的文件后可以使用参数 --amend 重新提交。

  • -grep filter,顾名思义

git diff 查看不会被提交的修改(没有staged(添加到索引中))

git diff --cached 查看提交时会修改的内容

git diff HEAD 查看当前所有自HEAD的修改

// 鼠标滚动 git config --global --replace-all core.pager 'less -+X'

git diff dev..test 查看两个分支差异

git diff dev...test 查看test从dev上创建分支时到目前所做的修改(dev和test共有父分支与test的差异)

git diff test 当前目录与test比较,可以加上 -- ./lib 来比较特定文件

--stat 只进行简单统计

git show [commit] 显示某次提交的元数据和内容变化 // 和 log 一样可以排除文件:git show -- . ':!some/path'

git blame 显示每行修改

git log -p <filename> 显示文件修改历史详情

在 commit 更新后push到远程 git push <remote> <branch>

之前要 pull [remote branch]从远程拉下来以更新到最新(push时要在远端新建repo)//可以改用fetch + rebase

git revert HEAD 撤销最近的一个提交,生成一个新的提交(适用于代码已发布的情况)

git reset HEAD <file>... 的方式取消暂存(add反动作)

git rm --cache <file> 从暂存中删除文件(不会真正删除,而是从库移除)// 取消跟踪

git reset HEAD~2 回退两个 commits // HEAD^ 表示前

git reset --hard 回退到历史版本(git reflog查看所以记录包括 reset 记录)(commit或者HEAD@{}),可用远端覆盖本地当前分支(后面参数为远端名\/分支名)。 // 无效时先尝试 git pull -Xtheirs

git reset --soft 回退 commit,修改在 stage 中

git reset --merge 取消合并,跟新版本的git merge --abort一样

git checkout <commit-hash> -- <file-path> 将HEAD指向历史版本进行查看

git checkout -f A -- . # 回退到 A 到内容

git clean -fd 删除未跟踪文件

git bisect start/good/bad 使用二分法来查找目标 commit

git log --pretty=oneline查看提交信息和文件修改历史, -p显示详细

git log --all --graph --decora图形化()查看所有分支所有操作

  • -since='1 sunday ago'

创建命令别名:git config --global alias.st status

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 -- Sub-dir 过滤只修改子目录的 log

创建分支开发,之后可以合并,!!!一个分支只做一件事情!!!

git branch创建分支(不会自动切换,checkout -b新建并切换),--track 设置分支跟踪,-m move/rename分支

git branch -r 查看远端所有分支,-d删除分支,-dr [remote/branch] 删除远程分支

git branch [branch] [commit] 新建分支指向指定commit

切换分支 git checkout(替换本地文件也用这个,切换到本地没有的远端分支时会自动创建同名分支并跟踪远端分支)

// --recurse-submodules 包含子模块

切换分支又不想提交一半的修改:git stash暂存,git stash list查看,git stash apply 【stash@{2}】应用

git checkout . 取消本分支所有更改(不可恢复!!!

git reset HEAD 取消本分支所有更改包括 stage

git reset HEAD^ 回退当前提交到工作区

git cherry-pick [commit] 选择一个commit,合并进当前分支

合并其他分支到当前分支用git merge 合并之前可以用git diff查看

git fetch 拉取远端更新,它取回的代码对你本地的开发代码没有影响

--all 拉取所有分支?

--prune 这个参数能在获取远端代码时,将远端已删除的分支,在本地也删掉。 这样你本地 origin 就不会有遗留的其他分支了

git merge feat 将 feat 合并到当前分支 // 在合并过程中取消:git reset --hard HEAD~ // 完成 git commit

git pull = git fetch + git merge。推荐后者

解决冲突文件就add,之后commit结束合并

合并其它分支还可以用 git rebase 目标分支名(可以加origin),直接指向目标分支(不会留下merge 命令一样的 commit痕迹,不能用于多人公用的分支)

git push -f (2.0以后push默认上传到当前分支,-f 是 force强制覆盖)

git push [远程名] :[分支名] 删除远程分支,将本地空分支(没有填写)上传到远程分支实现。在服务器上删除需要在 fetch

//  push local branch with same name as remote tag: git push origin refs/heads/product:refs/heads/product

后添加 —prune 参数删除本地的 origin 记录。

也可以使用删除远端分支:git push origin --delete serverfix

拉取远端改动 和 提交获取远端版本并覆盖本地分支:

git fetch origin + git reset --hard origin master

https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF

filter-branch全局性地修改电子邮件地址或者将一个文件从所有提交中删除

// git filter-branch --tree-filter 'rm -f passwords.txt' HEAD //在当前分支(-all :所以)的所以快照中删除文件并将指针移动到末尾

master 这个很好理解,它代表本地的某个分支名。

origin master 代表着两个概念,前面的 origin 代表远程名,后面的 master 代表远程分支名。

origin/master 只代表一个概念,即远程分支名,是从远程拉取代码后在本地建立的一份拷贝(因此也有人把它叫作本地分支)。

sublimeGit    https://docs.sublimegit.net/tutorial.html

https://docs.sublimegit.net/commands.html

在git status 中按I可以忽略文件,按S/U添加/撤销添加文件,ctrl+shift+s/u添加所有,按C提交文件更改,ctrl+a然后delete中止提交,按D查看变化,enter临时打开文件

SuperMade with Super