Git 整理
git 远程库
代码推送至远程仓库
1
git push origin HEAD:refs/for/sandbox/zengruihua/master
远程最新的 commit 以 rebase 的方式同步到本地
1
git pull --rebase
使用命令时必须保持本地目录干净(不能有modified文件,可以存在untracked文件)
拉取远程库
要想有远程库信息,需要使用git clone1
2git clone 远程库 && git cherry-pick FETCH_HEAD
git fetch 远程库 && git checkout FETCH_HEAD
git add
1 | git add -p |
此命令用于交互式添加修改到暂存区的命令。-p 代表 “patch”,允许用户选择要包含在下一次提交中的每个修改
y
:表示将当前的修改添加到暂存区,即标记为要提交;n
:表示不添加当前的修改到暂存区,即标记为不需要提交,跳过此次修改;q
:表示退出当前的git add -p
对话框;a
: 表示添加当前和所有未列出的修改到暂存区,即全部标记为要提交;d
: 表示不添加当前和所有未列出的修改到暂存区,即全部标记为不需要提交,跳过此次修改;e
: 表示编辑当前修改,即便更好地确定所要提交的内容;?
: 表示查看帮助信息,列出所有可用键和其含义
1 | git rm --cached <文件路径> |
从暂存区中删除 add 后的文件
git log
1 | git log --oneline --decorate --graph --all |
--oneline
:表示只输出 git 提交说明的标题 (即提交说明的首行,我们约定,首行标题和正文之间必须空一行,否则 git 会将第二行之后也是为标题的一部分显示出来)
--decorate
:会连同 git tag 一起显示,这里还没创建 tag,所以加不加效果一样
--graph
:以分支图的形式显示 log, 这里因为只有一个分支,所以加不加效果一样
--all
: 是显示所有分支的 log
查找代码在哪个提交中被删除
- 方法一
1
git log -S "代码" $file_path
- 方法二(手动)
1
2
31. git log --oneline $filepath 得到所有commit,对所有 commit 执行:
2. git show $commit $file_path >> tmp/yx
3. 再在文件中搜索对应代码
git reset
1 | # --hard 选项的作用就是保证在移动 HEAD 和分支指向的同事,让暂存区和工作去的内容和版本库(即 HEAD 指向的提交的目录树)一致) |
git checkout
切换分支或者恢复工作树文件
1
2# 如果是commitid就会使分离头指针
git checkout commit(branch)该命令在变更HEAD指向之外,同时会将工作区的内容修改成和HEAD指向(直接指向或者间接指向)的提交的树的内容一致)
1
2# 这里的参数 pathspec 是特定文件,commit(branch)是特定文件所在的分支或提交
git checkout commit(branch) pathspec此命令带上指定路径,泽 HEAD 就不会移动了,即此操作不影响版本库。在实际工作中,我们使用带上 pathspec 选项的 git checkout 命令检出特定提交的文件到工作区,使用不带 pathspec 选项的 git checkout 命令切换分支。
1
2# <start_point> 省略相当于 <start_point>=HEAD?
git checkout -b new_branch start_point此命令是 git branch new_branch start_point 和 git checkout new_branch 两个命令的组合,相当于新建一个分支,并变更 HEAD 指向,同时会将工作区的内容修改成和HEAD指向一致
放弃修改
放弃工作区全部的修改
1
git checkout .
放弃工作区中某个文件的修改
1
git chekout --filename
git diff
配置 git diff 使用外部工具
…
取消配置 git diff 使用外部工具
临时禁用外部 diff 工具,通过 –no-ext-diff 禁用外部 diff 工具
1
git diff --no-ext-diff <script.sh>
永久禁用
取消 GIT_EXTERNAL_DIFF 环境变量
执行 git config
git config –global –unset diff.external
命令
1 | # 工作区和暂存区差异 |
git commit –amend
修补式提交
git cherry-pick
应用提交
1 | git cherry-pick commit |
git revert
如果要撤销的提交已经被合入远程版本库,那么就不能被reset或者rebase了,因为这会改变已入库的提交的历史,会改变团队共同工作的基准
在实际工作中,我们一般使用 git revert 命令来撤销已经入库的提交。在提交未入库前,无必要使用此命令。使用其他的命令整理提交即可,git revert 是在提交已经被入库后而还想撤销时,不得已的做法。
git show
可以查看提交的 git log
1 | git show commit |
git branch
重命名分支
1 | git branch -m old_branch new_branch |
强制移动分支
1 | git branch -f branch_name newcommit |
git patch
检查补丁状态
1 | git apply --stat patch_name.patch |
检查补丁是否可打入
1 | git apply --check patch_name.patch |
正式打入
1 | git apply patch_name.patch |
如果使用 diff 打 patch,会提示补丁片段没有有信息:@@-1,5 +1,5@@,需要删除文件路径和 @@-1,5 +1,5@@ 之间的空行
打补丁
1 | patch -p1 < 26004743.diff/patch |
恢复源文件
1 | patch -RE -p1 < 26004743.diff/patch |
git stash
保存当前工作目录到一个新的 stash
1 | # 默认提交名 |
查看当前保存的所有 stash 列表
1 | git stash list |
删除某个 stash, 从 stash 列表中移除,如果不指定 stash,默认会删除最新的 stash
1 | git stash drop [stash] |
others
查看暂存区内容
1 | git ls-files --stage |
撤销将未被纳入版本控制的文件加入暂存区的动作
1 | # --cached 选项表示是从暂存区中移除 |
查看提交
1 | # git show = git show head |
组合技
将 Gerrit 修改的文件拷贝至文件夹中
1 | mkdir yxyx |
查看机型是否开启某想功能配置
1 | cd /torchlight/product_config |