Git
patch
git format-patch [commid_start]…[commitid_end] 注意,commitid_end这次的提交并不会产生patch
git am < XXXX.patch或者 git am * 打入路径内所有patch
为什么不使用review合入远程库?
常用命令
查看当前对应的远程分支:
git branch -vv
如果git pull或者./repo sync失败,使用
Vi .git/config
打开配置文件. 添加你要更新的分支, 如:
[branch "all_master"]
remote = origin
merge = master
untracked和tracked,也就是未跟踪和已跟踪
已跟踪文件又分为三种状态:
unmodified:文件没有做过任何修改
modified:文件已经修改了,但还没有提交
staged:文件已经修改,准备提交
要修改.git/config才能正常push
git push xxx_dev 将xxx_dev分支提交到远程库
如果没有配置config,需要写git push origin/XXX_dev
git log -n 1 –stat [commitID]简要的显示(最近一个提交的)文件增改情况。 -p
选项展开显示每次提交的内容差异,用-2
则仅显示最近的两次更新
git log --author=xiaoxi.cai
git log --pretty=oneline -p列出文件的所有改动历史
git log --follow -p显示某个文件在各版本的改动
git blame xx/../yy.java | grep zz 查看某行代码的改动信息
git log --name-status – telephony 显示telephony文件夹下的改动,列出文件名及注释
git show commitid显示某次更改详情。 只显示文件列表:git show –name-only commitid
git clone username@url -b选择分支
git status 查当前更改未提交的
git diff 显示有修改但未提交的文件的改动 git diff HEAD HEAD^比较上次提交commit和上上次提交. 历史版本也可类似的比较
git add 包括修改的和新增的文件 –u被修改过或已删除文件的信息添加到索引库。它不会处理untracted的文件 –A所有不同的文件信息都添加到索引库,包括删除的文件–I命令查看<path>中被所有修改过或已删除文件但没有提交的文件。可以通过git add –i(查看,可以通过该命令提交一部分修改的文件)的revert子命令(3: [r]evert)把已经添加到索引库中的文件从索引库中剔除。update子命令(2: [u]pdate)把已经tracked的文件添加到索引库中。add untracked子命令(4: [a]dd untracked)可以把还没被git管理的文件添加到索引库中。unchanged表示已经处于tracked下,它被修改了,但是还没有被执行了git add。 Git add . 将所有待加入索引的文件加入
git rm –r * 删除当前目录下的所有目录和文件
git commit -m "提交的描述信息" -a 选 git commit –s –m “commit info”
git tag创建一个标签(tag)指定某个提交(commit): git tag stable-1 1b2e1d63ff
git merge把一个已存在的本地分支或某个commit的修改合并现在的本地分支上 git merge –no-ff [branch_name]
git cherry-pick commitid用于把另一个本地分支的commit修改应用到当前分支。Git cp --continue
git pull自动merge掉本地代码(新增未add的本地文件不受影响) /push/fetch下载但不merge,可手动git merge
git branch –r 所有分支 –a当前分支 git branch XXX 新建分支,但不切换过去
git branch -vv(两个v),git config --list就能够看到本地分支跟踪的远程分支。
git checkout把 当前目录所有修改的文件 从HEAD中签出并且把它恢复成未修改时的样子.
-b 表示你指定从哪个分支checkout后新建-b xxx_dev remotes/origin/SSCR_FFB(不写的话,默认从master拉分支)
git checkout -b 本地分支名 origin/远程分支B
-t 用远程分支名作为本地分支名
git checkout commit_no [file_name] 取文件file_name在commit_no时的版本
git remote add origin ssh://git@dev.lemote.com/rt4ls.git 增加别名origin。一般已经配置了
git pull origin master分支同步到主干版本
git push <远程主机名> <本地分支名>:<远程分支名>
$ git push origin test:master // 提交本地test分支作为远程的master分支
$ git push origin :test
// 刚提交到远程的test将被删除。:左边的分支为空将删除:右边的远程分支
git reset # 去除某个提交之后的一切提交记录 –filename 去除add后进入index的文件
(git reset --hard HEAD~1(默认为~1,是回滚的提交数))或commit_no 回滚到某次提交状态 git reset HEAD^ --mixed回到commit&add之前状态,--mixed,是回到git add之前的状态,修改还在的 在远端的修改,是可以找回的,本地的回滚了就没了
git revert撤销操作,本身也会作为一次被提交的操作
git clean -dn 看看有哪此文件和目录会被删-f 只会删文件,不会删目录-df 可帮你搞定一切
git stash暂时搁置当前已做的改动
git stash apply 回复上一次搁置的内容
git stash list 来查看所有的搁置版本
git stash pop stash@{0}恢复保存的第一个 git stash drop <id> git stash clear
git pull origin master自己分支与master同步 功能同:git pull --rebase origin master分支与master同步
repo forall -c git fetch –p 对所有工程执行git fetch –p命令,进行分支信息更新命令。
Git show [tag_name]查看tag所在版本的信息。标签可以针对某一时间点的版本做标记,常用于版本发布。打标签:git tag xxxx
public key
在.ssh目录中有config id_rsa id_rsa.pub known_hosts这四个文件
key失效了
要把public key文件id_rsa***删掉
然后ssh-keygen -t rsa 回车回车回车
把新key重新拷到45网页的public key文件里
代码管理
1)git clone(下到本地)
例如:git clone git://github.com/someone/some_project.git some_project
上面的命令就是将'git://github.com/someone/some_project.git'这个URL地址的远程版本库,完全克隆到本地some_project目录下
2)git init 和 git remote add(上传到remote)
当你本地创建了一个工作目录,你可以进入这个目录,使用'git init'命令进行初始化;Git以后就会对该目录下的文件进行版本控制,这时候如果你需要将它放到远程服务器上,可以在远程服务器上创建一个目录,并把可访问的URL记录下来,此时你就可以利用'git remote add'命令来增加一个远程服务器端,
例如:git remote add origin git://github.com/someone/another_project.git
上面的命令就会增加URL地址为'git: //github.com/someone/another_project.git',名称为origin的远程服务器,以后提交代码的时候只需要使用 origin别名即可
3)repo init和repo sync(下到本地)
使用repo管理代码时使用
cd .repo/manifests
repo init -m aosp-telephony.xml
repo sync –d (可以解决一些repo sync报错的问题)
git branch –D XXX 如果本地分支有不要的提交,删掉重建分支
续传
用git init
git fetch git://…..git
即使断掉了,可以继续通过重复以上命令续传
等到fetch完会出现以下字样
From git://….
*branch HEAD -> FETCH_HEAD
意思是把最新的数据fetch到了本地的FETCH_HEAD分支上去了
然后用git checkout FETCH_HEAD
上传
首先保证存在本地分支(repo start XXX [--all|project])
- Git add .
- git commit -s(后面不用加参数 –s代表签名)
此时会跳出commit的编辑框,在编辑框中按格式说明填写注释(分三行写,方便以后用脚本合版本无关patch),保存提交即可。另外,如果是已经upload过,再次upload的commit,此时需要将changes-id那一行删掉。
- repo upload .
弹出文本编辑界面,将需要上传的project前的注释打开,:wq
如果有冲突提交失败,可以修改后使用:
Git commit –amend;
Repo upload;
这样就不会成为一个新的提交,而是对之前提交的修改
代码冲突解决
Please, commit your changes or stash them before you can merge.
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
碰到git不能删除或不能reset时,要注意是否是权限问题
删除未add的新增文件:git checkout . && git clean -xdf
常见问题
Avl7580 is published (but not merged) and is now XXx commits behind
指向的远程基节点有了更新,需要git rebase Avl7580(本地分支名),将基节点指向最新的分支节点。
合并commit
在本地的git库commit了多次,在push到远程的git库时,可以在本地合并这些commit。
每次合并两个commit
$ git reset --soft HEAD^1
$ git commit --amend
合并最后n个commit
$ git rebase -i HEAD~n