[Git相关] 常用git命令备忘

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012188065/article/details/86007009

1、初始化

git init 初始化git 仓
git add <file> 添加改动文件至暂存区(stage)
git commit -m <message> 提交改动文件至当前分支,并附着说明

2、常用基础命令

git status 查看当前状态
git diff 查看文件具体差异

git log 查看提交历史
git log --oneline 单行查看提交历史(行首的commit id 仅有七位)
git log --pretty=oneline 单行查看提交历史(行首的commit id是全部的)

HEAD 指向的版本就是当前版本
git reset --hard HEAD^ 回退到上一个版本
git reset --hard HEAD^^ 回退到上两个版本
……
git reset --hard HEAD~5 回退到上五个版本

git reflog 查看所有操作的记录

修改文件后,需要清除
git checkout – <file> (注: 某些时候如果不加 – 符号, git会理解此命令为切换到分支<file>)
修改文件后,并添加到了暂存区,需要清除
git reset --hard HEAD <file>

3、与远程仓建立关联

git remote add origin [email protected]:git_username/repository_name.git
本地目录下关联github上的远程仓

git push -u origin master 首次将本地的修改提交到远程仓
git push origin master 非首次将本地的修改提交到远程仓

git remote remove origin 取消本地目录与github上远程仓的关联

4、从github上取代码的两种方式

1、git clone [email protected]:git_username/repository_name (速度快,强烈推荐。)
2、git clone https://[email protected]/git_username/repository_name (即 git clone + <网址>, 但速度慢)

5、组合拳之一:创建新的分支去开发

1、git checkout -b dev 创建并切换到新的分支dev
相当于
git branch dev 创建分支dev
git checkout dev 切换分支dev
2、 在新分支dev上开发并git commit
3、git checkout master 切换会原有分支 master
4、git merge dev 将dev分支上的修改merge到当前分支(速度非常快)
5、git branch -d dev 删除无用分支dev(只有git merge后,才可用-d删除,若没有合并,需要用git branch -D dev删除)
注:由于此种merge方式时 fast-forward的方式,如果删除 dev分支,可能导致master分支的修改找不到
所以merge时,最后不要使用此种模式,而使用普通模式
git merge --no-ff -m “merge with no-ff” dev
这样相当于将dev分支上的修改 copy到master分支上,删除dev分支不会对master分支造成影响。

如果两个分支均有修改,merge时会产生冲突,文件中会有如下冲突部分

<<<<<<< HEAD
xxxxxxxx1
=======
xxxxxxxx2
>>>>>>> dev

修改完之后,git add, git commit提交即可
可以使用如下命令查看冲突
git log --graph --pretty=oneline --abbrev-commit
在这里插入图片描述
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。

6、保存工作现场

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,
可以使用 git stash list 查看已经缓存的修改,各个branch上均可以查看
修复后,再git stash pop,回到工作现场。
git stash pop 等价于 git stash apply 加 git stash drop

7、cherry-pick patch

有时候我们需要将其他分支的patch,连同author,changeId,ticket号等信息一并cherry-pick过程
1、git format-patch -1 <commit-id>
保存指定<commit-id>开始的1个patch,(-2 就是2个patch,依次类推)
假设我们想把如下patch保存为一个单独的patch
在这里插入图片描述
使用 git format-patch -1 6e18ccee2afd3, 如下:
在这里插入图片描述
便可以得到一个看起来似乎非常专业标准的patch,有木有,google每次提供的安全漏洞patch也是这样子的。

2、应用patch
在对应代码的位置,执行
git am 0001-heif-add-new-file-and-mime-types-to-MediaScanner-DO-.patch 即可。

8、合入google安全漏洞

以frameworks/av仓库为例:
git remote add aosp -f "https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/av"	
然后git cherry-pick commitID 对应的patch就可以了。

正常情况下不需要我们额外这样做,CM会定期下载AOSP代码到服务器,但会有意外。
我们只需要repo sync . -j4
然后git cherry-pick commitID

猜你喜欢

转载自blog.csdn.net/u012188065/article/details/86007009