git

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

posted on 2016-12-14 12:13  月下银狼  阅读(322)  评论(0编辑  收藏  举报

导航