#git版本回退到某一次提交
git reset --hard commitId ---代码回退到commitID对应的版本
#撤销本次提交(回滚代码到上一次提交)
git reset --soft HEAD^
HEAD^ 表示上一个版本,即上一次的commit,也可以写成HEAD~1
如果进行两次的commit,想要都撤回,可以使用HEAD~2
--soft
不删除工作空间的改动代码 ,撤销commit,不撤销git add file
--hard
删除工作空间的改动代码,撤销commit且撤销add
git reset 版本回退命令有3种方式:
--mixed 会保留源码,只是将git commit和index 信息回退到了某个版本.
--soft 保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
--hard 源码也会回退到某个版本,commit和index 都会回退到某个版本.(注意,这种方式是改变本地代码仓库源码)
git reset HEAD^ #回退所有内容到上一个版本
git reset HEAD^ a.py #回退a.py这个文件的版本到上一个版本
git reset –-soft HEAD~3 #向前回退到第3个版本
git reset -–hard origin/master #将本地的状态回退到和远程的一样
git reset 057d #回退到某个版本,057d ~ commitId
git revert HEAD #回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit
git reset --hard HEAD~X 会退到之前X版本
git diff master..test 显示两个分支间的差异
eg : git diff master...test ‘master’,‘test’的共有 父分支和'test'分支之间的差异
eg: git diff --stat 统计那些文件被改动
如果需要一行显示 git log --pretty=oneline
git checkout -- file 丢弃工作区修改,撤销修改到最近一次
git rm 删除本地版本库文件,再使用 git commit 提交
git checkout -b dev 创建dev分支并切换到dev分支
git branch dev 创建dev分支
git checkout dev 切换到dev分支
git checkout . ``#本地所有修改的。没有的提交的,都返回到原来的状态
git merge 合并指定分支到当前分支
eg: git merge dev 把dev分支合并到master分支上
git log --graph 可以看到分支合并图,如果git无法合并,必须先解决冲突才能提交
git checkout master 切换到master分支
git checkout -b issue 新建分支
git pull 从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地
eg: git pull origin master origin版本库的代码更新到本地的master主枝
git push :将本地commit的代码更新到远程版本库中
eg: git push origin git push localbranch master:refs/for/master 将本地的代码更新到orgin的远程版
本库中
git checkout HEAD <some file> [<some file>] ,清除工作目录树中的修改
打补丁
将commit打包成patch
修改代码
$ vi drivers/bluetooth/btusb.c
把代码添加到git管理仓库
git add .
提交修改
git commit -m "some message"
查看日志,获取到hash
git log
生成patch
git format-patch -s 1bbe3c8c19
或者--
git format-patch HEAD^ # 最近的1次commit的patch
测试,应用patch
检查patch文件
git apply --stat xxx.patch
查看是否能应用成功
git apply --check xxx.patch
应用patch
git am xxx.patch
注:1. 之前应, git am -abort 放弃之前am信息, 有可能会遇到 .git/rebase-apply still exists but
mbox given
修改以及commit并且以及push的描述
修改最近一次的commit
git commit --amend
修改commit历史,
git rebase -i HEAD~X or git rebase -i (commit -id) 接着会出现
pick:*******
pick:*******
pick:******* ls
将pick改为edit就可以修改,利用`git commit --amend命令
最后 git rebase --continue 搞定
如果需要删除已经push的可以将pick改为drop
通过git rebase -i 将本地的多次提交合并为一个,以简化提交历史。本地有多个提交时,如果不进行这一步,在git rebase master时会多次解决冲突(最坏情况下,每一个提交都会相应解决一个冲突)
git rebase master 将master最新的分支同步到本地,这个过程可能需要手动解决冲突(如果进行了上一步的话,只用解决一次冲突)
然后切换到master分支,git merge将本地的local分支内容合并到master分支
git push将master分支的提交上传
git checkout master
git pull
git checkout local
git rebase -i HEAD~2 //合并提交 --- 2表示合并两个
git rebase master---->解决冲突--->git rebase --continue
git checkout master
git merge local
git push
git pull --rebase没有产生新的节点,使用rebase的git演进路线(提交树)是一直向前的,这样在版本回退时也很容易; git pull 有可能会产生新分支,会是跳跃的(有分叉),且merge产生冲突处理起来比较麻烦(分支节点多)
如果只查文件中某一部分由谁所写:
git blame 文件名 | grep "查找词"
或者:
git blame 文件名 -L a,b
-L 参数表示后面接的是行号(Line), a,b代表查询文件的第a行到第b行之间的文件内容情况。
a, 则代表从第a行到文件结尾
,b则代表从文件开头到第b行。
假如我们要查上图的第5行,命令则如下所示:
git blame webpack.mix.js | grep "Mix Asset"
或
git blame webpack.mix.js -L 5,5
仅仅这些,我想应该已经足够帮助我们找出真凶了。
如果你想更加强大,这里有git blame命令的详细文档:https://git-scm.com/docs/git-blame,供你慢慢啃
-------------------------------
1.repo forall命令
# repo forall -help
# repo forall -c: 此命令遍历所有的git仓库,并在每个仓库执行-c所指定的命令,被执行的命令不限于git命令,而是任何被系统支持的命令,比如:ls, git log, git status等
2.repo forall -c使用
# 切换分支
# repo forall -c git checkout dev_test
# 删除分支
# repo forall -c git branch -D dev_test
# 丢弃分支
# repo forall -c git git reset —hard 提交ID(或最原始:HEAD)
# repo forall -r framework/base/core -c git reset —hard 提交ID(或最原始HEAD)
repo forall可以遍历每个repo仓库并执行同样的命令
用法为:
repo forall [<project>...] -c <command> [<arg>...]
-c后可以直接跟任何shell命令
eg:
repo forall -p -c git checkout branch_name
repo forall -h
Usage: repo forall [<project>...] -c <command> [<arg>...]
repo forall -r str1 [str2] ... -c <command> [<arg>...]"
Options:
-h, --help show this help message and exit
-r, --regex Execute the command only on projects matching regex or
wildcard expression
-g GROUPS, --groups=GROUPS
Execute the command only on projects matching the
specified groups
-c, --command Command (and arguments) to execute
-e, --abort-on-errors
Abort if a command exits unsuccessfully
Output:
-p Show project headers before output
-v, --verbose Show command error messages
-j JOBS, --jobs=JOBS
number of commands to execute simultaneously
git reset --hard HEAD~X 会退到之前X版本
---------------------------------------
git log --graph --pretty=oneline --abbrev-commit
git checkout master
git merge dev # fast forward方式,合并分支dev到master,不会产生新的节点,类似指针指向dev内容,快速前进
git checkout master
git merge --no-ff -m "merge with no-ff" dev -- -m将合并后的内容创建为一个新的提交点
--no-ff 指的是强行关闭fast-forward方式
--no-ff 指的是强行关闭fast-forward方式。--no-ff (no fast foward),使得每一次的合并都创建一个新的commit记录,即要求git merge即使在fast forward条件下也要产生一个新的merge commit,用来避免丢失信息。这对于以后代码进行分析特别有用