.git/config 下内容:
git push caf_ssh HEAD:refs/for/msm8909-L
或
git push ssh://gerrit/platform/kernel HEAD:refs/for/msm8909-L
也可使用 git config -l 查看分支情况及提交信息, 完成提交
下载代码git clone也可以:
git clone ssh://lvrongguo@192.168.30.201:29418/qcom/kernel/msm-3.10.git
repo sync相关
//工程目录下.repo文件夹下的manifest.xml手动修改内容后,repo sync -d -c --no-tags即可更新到manifest的节点
repo forall –c git log > commit.txt //显示所有文件夹下的代码提交
repo sync //下载代码
repo sync platform/kernel //只下载kernel代码, 打开.repo下manifest.xml文件, kernel路径名字就是platform/kernel
//将整套代码回退到2018-11-02号13:21时刻的节点
repo forall -c 'commitID=`git log --before "2018-11-02 13:21" -1 --pretty=format:"%H"`; git reset --hard $commitID'
参数说明:
forall 操作分支中的所有仓库
-c 只操作当前分支
--before 早于指定时间点的提交记录
-1 只显示最近的1条记录(注意这是数字 1 ,如果要显示 2 条就写 2,以此类推)
"2017-03-17 07:00" 希望回退到的日期(时间点)
--pretty 以指定格式显示提交记录
%H 提交记录的hash值,即commit id(其它格式及更详细的信息可以使用命令git log --help打印帮助信息并查看“PRETTY FORMATS”小节)
命令含义:
这条repo命令的实质就是在当前分支的每个仓库下执行git log命令,找出该仓库下符合时间条件的第一个提交记录,然后对该仓库执行git reset --hard操作。就这么简单。
注意事项: 命令里的单引号'以及`要注意区分! 前后两个是单引号' 当中两个是`
举例: repo forall -c 'commitID=`git log --before "2017-04-15 07:00" -1 --pretty=format:"%H"`; git reset --hard $commitID'
分支相关:
创建远程跟踪分支:
git checkout --track remote/caf/msm8909-L -b mybranch
git pull --rebase //同步库分支代码
创建一个远程跟踪分支branch1
git remote add branch1 ssh://lvrongguo@192.168.30.201:29418/qcom/kernel/msm-3.10.git
git remote show 查看创建的分支
但git branch 看不到
git fetch branch1 //之后git branch -a可以看到
查看所有分支 git branch -a
查看本地分支 git branch
查看本地分支跟踪的远程分支 git branch –vv
git branch branchname //创建分支
git checkout branchname //切换分支
git branch –D branchname //删除合并的和没有合并的分支
git checkout -b mybranch //创建mybranch分支并切换到mybranch分支,相当于 git branch mybranch 然后再 git checkout mybranch
git branch -d mybranch //删除已经合并的mybranch分支
git merge mybranch //合并指定分支mybranch到当前分支
git log --graph -- pretty=oneline --abbrev-commit //查看分支的合并情况
git checkout -b mybranch origin/branch1 // 创建本地分支mybranch, 并让mybranch跟踪远程库分支origin/branch1
简单例子:
创建远程跟踪分支: git checkout -b mybranch1
push代码: git push -u origin mybranch1
git log:
git log //基本查看用法
git log file1 file2 //查看file1文件file2文件的提交记录
git log file/ //查看file文件夹下所有文件的提交记录
git show --stat commitID //显示单个提交的修改文件记录
git log --stat commitID //显示该提交记录之前的所有修改文件记录
git show cimmitID > xxx.patch //把本地一个提交打成patch
git log -p --author=lvrongguo > xxx.patch //把在远程的所有修改打成patch
git log --name-only //以只显示文件名的方式查看
git checkout -- file //单独同步某个文件
git log --author=zhangsan //显示某人的提交记录
git log --oneline //单行显示所有log
git log --pretty=oneline file //简略显示某个文件的修改记录
git whatchanged file //显示某个文件的详细修改记录
git log --stat //查看提交记录包含的文件名
管理自己的代码:
git init
git add . //git add 是将工作区的修改提交到暂存区
git commit -am “xxx” //git commit 是将暂存区的修改提交到Git 目录
常用管理代码命令:
git add -A 提交所有变化
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git show //查看最新的commit
git show commitId //查看指定commit ID的所有修改
git show commitId fileName //查看某次commit中具体某个文件的修改
git blame <file> //查看指定文件的修改记录, 然后再git show commitID
git checkout -- file.txt //回退某个文件的修改,也就是把工作区的修改都撤销,回到和版本库一样的状态
git checkout -- file.txt //误删除了某个文件,但还没有git add,需要恢复
git diff readme.txt //查看readme.txt修改
git diff HEAD -- readme.txt //查看工作区和版本库里面最新版本的区别
git diff > xxx.patch //打patch
patch –p1 < xxx.patch //同步patch
git aplay xxx.patch //同步patch
git status
git commit
git commit --no-verify //no code format check, but use this method will no change id, so you should use git commit --amend
git init //创建新库
git commit --amend //第一次提交到库上的文件有点问题,通过这条命令修改上次提交的注释并git push后两次的提交合并为一条
git cherry-pick commitID //选择某一个分支中的指定commit合并到本分支或其他分支中,而不用关注其前后修改
代码回退,git reset相关:
git中用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^
上上一个版本就是HEAD^^ , 当然往上100个版本写100个^比较容易数不过来,
所以写成HEAD~100
git reset --hard HEAD~3 //回退commit到本地库的3次提交
git reset --hard commitID //将本地修改回退到当前ID对应的提交状态,如果该ID为中间某个节点, 则将该ID之后的所有节点回退
git revert commitID //回退指定commitID的提交,只回退本ID,不影响其前后的ID
git commit到本地的修改撤销后如何恢复:
git reflog
git reset --hard commitID //commitID 为git reflog列出的需要恢复的ID
git reset HEAD readme.txt //撤销已经git add但还没有git commit的提交,也就是把暂存区的修改回退到工作区, 然后再git checkout -- readme.txt 就回退工作区,回到和版本库一样的状态。
git reset HEAD //如果执行git add之后,想将所有暂存区的文件撤回到工作区:
如果执行git commit之后,因为某种原因想撤销提交但仍然保留commit之前的修改,可以通过以下命令撤销提交:
# 将暂存区最近一次提交到Git目录的文件全部撤回到暂存区
git reset --soft HEAD^
如果想将git commit和git add一并撤回:
# 将暂存区最近一次提交到Git目录的文件全部撤回到暂存区,且将暂存区的文件全部撤回到工作区
git reset --mixed HEAD^
# 等同于该命令
git reset --soft HEAD^ && git reset HEAD
如果不想保留最近一次提交的所有修改: git reset --hard HEAD^
git reset --hard COMMITID1 //本地代码回退到COMMITID1的提交
如何回退git reset --hard COMMITID1:
git reflog //查看所有commit 日志记录(包括reset --hard 之后的)
git reset --hard COMMITID0 //COMMITID0为COMMITID1之前的那次commitid
git reset COMMITID //回退后需要git add ,然后git commit达到和git reset --hard一样的效果
git reset --soft commitID
//回退后需要git commit达到和git reset --hard一样的效果;
只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
如何回退git reset --hard COMMITID1:
git reflog //查看所有commit 日志记录(包括reset --hard 之后的)
git reset --hard COMMITID0 //COMMITID0为COMMITID1之前的那次commitid
当有正在修改的文件还未提交是,突然有个临时bug需要修复,需要把未修改完的文件回退了,切到bug所在分支处理,除了打patch保存外还可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash //保存现场,再git status 查看工作区就很干净了,默认没有标识,不好区分,如果要保存多个现场,最好加save参数
git stash save Test.scala
git stash save Test
git stash save Test1 //保存多个现场
git stash list //查看上次保存的工作现场(确保和上次stash是同一个分支)
git stash pop //恢复上次的现场,并删除该 stash, git stash list查看就很干净了
git stash pop $num //想要指定恢复某个 stash
当git clone时实际上git自动把本地的matser分支和远程的master分支对应起来了,并且远程仓库的默认名称是origin
git remote //查看远程库信息
git remote -v //查看远程库详细信息
配置别名:
git config --global alias.st status //git st 就表示git status
git config --global alias.co checkout //git co 表示 git checkout
git config --global alias.ci commit //git ci 表示git commit
git config --global alias.br branch //git br 表示git branch
git config --global alias.unstage 'reset HEAD' //git unstage表示 git reset HEAD