1、gerrit 提交审核 git push origin HEAD:refs/for/master
2、不改变chang-id的情况下,修改上一次推送 git commit --amend
每个change-id对应一个review,可以手动修改chang-id提交覆盖上一版本的提交
3、以图形化方式显示版本合并历史 git log --graph --pretty=oneline --abbrev-commit
--- 用vscode配合Gitlens 插件能够更好地以图形化的方式显示提交历史等信息。
4、默认情况下合并分支后,如果被合并的分支被删除则不会保留分支的信息,可以在merge的时候加上 --no-off 参数禁用 Fast Forward。
例:
git merge --no-ff -m "merge log" dev
5、将代码回退到指定版本
git reset --hard xxxxxxxxxxxxxxxxxxxxxxxx
git diff xxxxx > patch
git apply patch
合并提交:
git rebase -i HEAD~2
更新到某个tag
git checkout -b new_branch tag
6、生成change-id
git rebase
7、
git log --graph --pretty=oneline --abbrev-commit
8、Git合并某个分支的一个cherry-pick到另一个分支
例如要将A分支的一个commit合并到B分支:
首先切换到A分支
git checkout A
git log
找出要合并的commit ID :
例如 0128660c08e325d410cb845616af355c0c19c6fe
然后切换到B分支上
git checkout B
git cherry-pick 0128660c08e325d410cb845616af355c0c19c6fe
然后就将A分支的某个commit合并到了B分支了
转移多个提交
Cherry pick 支持一次转移多个提交。
git cherry-pick A..B
上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。
注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。
$ git cherry-pick A^..B
9、从库里删除但是不物理删除
git rm --cached xxxx
10、更新并合并
git pull --rebase
原理:把本地当前分支的未推送 commit 临时保存为补丁 (patch)(这些补丁放到 .git/rebase 目录中),然后将远程分支的代码拉取到本地,最后把保存的这些补丁再应用到本地当前分支上。
若要把 rebase 当做 git pull 的预设值,可以修改 ~/.gitconfig 让所有 tracked branches 自动使用该设定:
[branch]
autosetuprebase = always
11、Windows下面使用git拉取或者提交项目时,遇到长路径提示file name too long的解决方案
可以使用以下命令来修复:
git config --system core.longpaths true
也可以仅设置当前项目:
git config core.longpaths true
查看设置状态:
git config core.longpaths
12、若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached
命令。
(Git 1.6.1 及更高版本还允许使用 git diff --staged
,效果是相同的,但更好记些。)
13、Git Diff 的插件版本
可以使用 git diff 来分析文件差异。 但是,如果你喜欢通过图形化的方式或其它格式输出方式的话,可以使用 git difftool 命令来用 Araxis ,emerge 或 vimdiff 等软件输出 diff 分析结果。 使用 git difftool --tool-help 命令来看你的系统支持哪些 Git Diff 插件。
14、删除branch
git branch -d/D xxxxx
15、重命名本地branch
git branch -m xxxxxx
16、新建本地分支并推送到远程
git checkout -b test-branch
git push origin test-branch:test-branch
本地新建branch,推送到gerrit上:
确保推送的commit id 在库中可以找到,然后再在此基础上增加commit。
17、和远程库同步删除的tag
git fetch --prune --tags
向远程库推送tag
git push origin
删除本地库tag
git tag -d tag_name
18、
refs/changes/[CD]/[ABCD]/[EF]
Where:
[CD] is the last two digits of the change number
[ABCD] is the change number
[EF] is the patch set number
You can use the change reference to fetch its corresponding commit:
git fetch https://[GERRIT_SERVER_URL]/[PROJECT] refs/changes/[XX]/[YYYY]/[ZZ] \ && git checkout FETCH_HEAD
Your ref spec in repo can be read with: git ls-remote | grep $(git rev-parse HEAD)
.
19、git always says "Warning: Permanently added '...' (RSA) to the list of known hosts."
解决办法:create a ~/.ssh/config file and insert the line:
UserKnownHostsFile ~/.ssh/known_hosts
20、git add
Summary:
git add -A
stages all changes
git add .
stages new files and modifications, without deletions
git add -u
stages modifications and deletions, without new files
21、git设置默认编辑为vim
If you want to set the editor only for Git, do either (you don’t need both):
- Set
core.editor
in your Git config:git config --global core.editor "vim"
- Set the
GIT_EDITOR
environment variable:export GIT_EDITOR=vim
22、sync delete tags with remote repo:
git fetch origin --prune --tags
push only the desired TAG:
git push origin
23、推送特定的一个commit到远程库
git push
works. the trick is to combine it with git rebase -i
to move the commit you want as the first commit, and specify that commit-sha.
24、git stash -p
交互式stash部分文件
25、解决冲突,应用某个版本:
从一个特定分支获取文件拷贝(比如说你在合并master和feature123两个分支):
git checkout feature132 flash/foo.fla
git add flash/foo.fla
另一种方式是通过git输出文件 - 你可以输出到另外的文件名,然后当你决定了要用哪个后,再将选定的正确文件复制为正常的文件名:
# 检出master-foo.fla和feature132-foo.fla
mv feature132-foo.fla flash/foo.fla
$ git add flash/foo.fla
也可以用“git checkout —ours flash/foo.fla”和“git checkout —theirs flash/foo.fla”来检出特定版本的文件,而不用记住你在合并的分支名字。
26、git reflog --date=iso
27、git shortlog -sn 命令可以列出代码仓库的提交者统计