git,repo

#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,用来避免丢失信息。这对于以后代码进行分析特别有用


 

posted @ 2021-07-25 09:15  petercao  阅读(266)  评论(0编辑  收藏  举报