git branch [local_branch]:基于当前分支创建一个本地分支,该分支没有和任何远程分支对应上
git branch -D [local_branch]:删除本地分支
git checkout -b [local_branch] [remotename]/[branch]:创建一个与远程分支对应的本地分支
git checkout -b [local_branch]:基于当前分支建立一个没有与任何远程分支对应的分支。
git branch --set-upstream-to=[remotename]/[branch] [local_branch]:将一个没有与任何远程分支对应的本地分支与远程分支对应
git push origin [local_branch]:[remote_branch]:如果远程分支remote_branch不存在,则创建名为remote_branch的远程分支。执行完这条命令后,local_branch还没有和remote_branch对应上,需要执行git branch --set-upstream-to=[remotename]/[branch] [local_branch]才行。git push后面不加参数的话,将推送到与当前分支对应的远程分支,如果有加:[remote_branch],则推送到remote_branch。
git rebase [localbranch]:将localbranch的提交通过变基的方式合并到当前分支。
git merge [localbranch]:将localbranch与当前分支合并。
git pull --rebase:在提交的时候最好一个个文件提交。在提交文件或者同步整个文件夹前,记得先要跟服务器同步,在提交修改,在要同步的文件夹打开终端,使用(git pull --rebase)就可以同步。
git log --pretty=oneline 文件名(其实"git log 文件名"也是可以的):使用(git log 【文件名】)可以看到文件的改动情况。若后面不加文件名,则会看到当前目录下所有文件的改动(增加或删除或修改)。在log中可以看到修改的作者,时间,CR号,changId,用changId去走查页面(http://19.9.0.151)可以看到修改的内容有哪些。
git reset --hard:如果提交了(使用了add或commit或repo_19.9.0.151 upload),当时最终无法提交上去,或不想提交了,需要使用该命令重置
git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了
git reset head <filename> 执行了git add操作, 想取消暂存
git reset --hard HASH 返回到某个节点,不保留修改。
git reset --soft HASH 返回到某个节点。
git clean -df:清除不受控文件。就是从未上传到git服务器上的文件
git checkout -- ./:重置修改内容,回复到原来的版本。就是最近同步没有冲突的版本。
git checkout head readme.txt todo.txt 撤销对readme.txt和todo.txt的修改
git checkout head *.txt 撤销对所有txt文件的修改
git checkout head 撤销对所有文件的修改
git checkout . 撤销本地所有修改的, 没有的提交的内容,都返回到原来的状态
git rm xxx:在删除或者覆盖文件的时候,尽量不要直接删除,而是用git rm 命令。如果删除了,也要使用git rm删除一下。
git branch -avv 可以看到该仓库的本地分支对应远端的哪个分支,还可以看到当前分支落后或者超越远程分支。如果落后, 说明需要pull(即fetch和merge),如果超前了就需要将本地提交push到远端。
git branch -r:查看远程分支。
git branch -vv:查看本地分支与远程分支的对应关系
git diff :对比当前分支和最近一个提交的变化。也可以git diff 文件名
git show [commit id]:查看某个提交,查看提交了什么。使用git log查出有哪些提交,然后“commit”后面跟着的字符串就是commit id。
对上一个commit追加提交
git commit -m 'initial commit'
git add 忘记提交的文件
git commit --amend
撤销工作区或者暂存区的修改
通过 git checkout -- 文件名 命令可以撤销文件在工作区的修改。
通过 git reset 文件名 命令可以撤销指定文件的 git add 操作,即这个文件在暂存区的修改。
通过 git reset 命令可以撤销之前的所有 git add 操作,即在暂存区的修改。
git push
后面不跟任何参数的话,会将本地分支的修改推送到所有本地分支对应的远程分支上,而不只是推送当前本地分支。
所以要后面不跟任何参数的话,只能保留一个本地分支,其他本地分支使用git branch -D <本地分支> 把其余本地分支删除
远程仓库的主机在本地的别名不一定就是origin,可以看看git branch -a 显示的远程分支的全名,如:remotes/githuborigin/master,
那么远程主机别名是githuborigin,也可以在.git/config文件中看到:[remote "githuborigin"],其中url的协议头是ssh而不是http,
那么验证的方式就是密钥对,而http的方式是每次都需要输入账号密码的。
[core]
repositoryformatversion = 0
filemode = true
[filter "lfs"]
smudge = git-lfs smudge --skip -- %f
[remote "githuborigin"]
url = ssh://git@github.com/yos-two/mt8163-yongyida
projectname = mt8163-yongyida
fetch = +refs/heads/*:refs/remotes/githuborigin/*
[branch "YOS3.0"]
remote = githuborigin
merge = refs/heads/YOS3.0
关于远程分支,有时只要写分支名就可以了,如果有指定那里些远程分支的,如果那里可以
写远程分支和本地分支的,则需指明是远程的,remote/origin/branchname
使用git命令时最好在.git文件夹路径下操作,如果在更深入的路径下提交,可能会出现non-fast-forward的错误。
给本地取分支名字时,千万不要跟其他远程分支名字相同,最好跟你要提交到的那个远程分支名相同,这样直接用git push命令,而不用写上origin <本地分支>:<远程分支>;
提交时git push被reject时要看下信息,左边是本地分支,右边是远程分支,看要推送到的远程分支有没有对。
! [rejected] YOS3.0 -> YOS3.0 (non-fast-forward)
! [rejected] master -> master (non-fast-forward)
出现non-fast-forward时,最好不要使用 -f选项,还是要排查好原因,因为可能会出现强制覆盖,而且用git命令无法回退。
同步远端,相当与svn的update
git pull origin branch_amigo_7.1.0-r10_rel //注意不要remotes/origin/branch_amigo_7.1.0-r10_rel中
前面的remotes/origin/;该指令结合了fetch和merge
下载某个流的分支:
在146服务器中,project -> List,点击某个代码库。General中看到这个语句
git clone ssh://zhangjinbiao@19.9.0.146:29418/Amigo_Settings
然后在Branches看到想下载的分支,如:branch_Amigo_Settings_V8.0.0
则编辑指令: git clone -b branch_Amigo_Settings_V8.0.0 ssh://zhangjinbiao@19.9.0.146:29418/Amigo_Settings
git status .
1.在工作区修改了,没有提到缓冲区,显示
Changes not staged for commit:
add后去到index(暂缓区)
2.在暂缓区中,未提交(commit)到本地库,显示:
Changes to be committed:
commit后进入本地库
3.Untracked files:
没有被git控制的文件,从没有被add的文件。
git status -uno
只显示被git控制的文件。
git reset
commit后回退
git reset --soft/hard/mixed remotes/origin/branch_Amigo_Settings_V8.0.0
如果已经提交到远程库了,就用hard,这样比较干净,但是会把工作区的修改删除了,就是删除上次提交的修改。
如果用soft,会把修改回退到暂缓区,这样可以用commit把修改提交到本地分支。
如果用mixed,就会把修改回退到工作区,就是需要add把修改添加到暂缓区,在commit提交到本地分支。
git diff
git diff HEAD :查看本次修改和上一次commit(本地分支)的差异
http://www.yiibai.com/git/git_diff.html
忽略某些文件或者目录,而不被git管理
在.git的同级目录下,创建一个叫.gitignore的文件:vim .gitignore
输入想要忽略的文件,具体操作参考下面的链接
https://www.cnblogs.com/wangmo/p/7737109.html
github的ssh key的生成和添加(https://www.cnblogs.com/blogzhangwei/p/5944975.html)
1.使用 ssh-keygen -t rsa 命令生成rsa秘钥对。
2.将生成的秘钥中的公钥复制到github账号中的ssh key中。作用只是登录。放到github账号中相当于把该client的公钥放到服务器的authorized_keys中。
为仓库添加允许push的队友(账户):
1.进入对应的代码仓库
2.点击settings,再点击deploy keys,add deploy key(想要push到仓库的队友的公钥)。
提交文件可以参考的步骤
1. 首先用(git status .)查看当前文件夹下有哪些文件更新了,有哪些是新增的,若新增的是某些自动生成的无关文件,则用rm删除,Tab键可以自动完善你要写入的命令或你要写入的文件等。
2. 然后用(git add 文件名1 文件名2)将文件加到暂缓区
3. 用(git commit -m "CR134584245 新建5615GN M升级项目")将暂缓区所有文件上传到服务器,其中引号中的文字是描述性的对于git来说,但是对于gionee来说,是有格式要求的,就是如上所示,“CR号 修改描述文字”
4. 还要(git status .)一下看提交了那些内容,在该命令后,看到有些自动生成的尾部带“~”的文件是隐藏要删除的文件。要在终端或图形界面中删掉。再
5. 最后用(git rebase)将提交上去 同步到网页显示。
使用rsa的公钥登录的协议在以下链接中:
http://www.jianshu.com/p/33461b619d53
提交apk:
1. git branch -a: 查看所有流和当前所在的流。
2.git checkout -b master remotes/origin/maste: 如果当前不在任何流中(Not currently on any branch),则切到你要去到的流,master为流在本地的名字,remotes/origin /maste为流的路径。如果本地有这个流了,则用git checkout maste就可以切到这个流。
3.git reset --hard remotes/origin/master:重置一下,就是跟git上的最新版本保持一致。
4.git pull:最终要用该命令才可以真正重置,才开始下载东西。
5.覆盖三个文件。release,CRnote,apk。
6.使用git status查看,若是全部都要提交的则git add .(这个‘.’表示当前路径下的add所有修改或新增的)。否则一个个add
7.使用git commit,进入一个界面输入CR号(不用写“CR”这两个字),enter换行输入update apk。最后在提示下,输入Ctrl x。再输入Y。
8.最后使用repo_19.9.0.151 upload .(同步到151界面,去到151点击change,在上面add要review的人)
关于ref,远程主机名的解释
使用git clone命令下载的库,在同步到gerrit上时使用一下命令,这个不是git的规则,而是gerrit的规则
git push origin master:refs/for/master
还有一个指令是refs/heads/master,和上面指令的区别是, 简单点说,就是refs/for/mybranch
需要经过code review之后才可以提交;refs/heads/mybranch不需要code review。如果这个分支
是被gerrit控制的使用git pushorigin master:master的话,就会报prohibited by Gerrit
git push <远程主机名> <本地分支名>:<远程分支名>
这是一个格式:clone时,自动把远程主机名映射成一个别名,叫origin。
推送本地分支lbranch-1
到新大远程分支rbranch-1
:
$ git push origin lbranch-1:refs/rbranch-1
Refs是一个文件,refs/for/中的”refs“和该文件有关,这个refs是一个引用,挺复杂的,不太懂
.git/refs/
heads/
master
some-feature
remotes/
origin/
master
tags/
v0.9
其结构如上。heads下的master和some-feature是本地分支。origin下的master是远程仓库分支。
不解释了看这篇文章吧:https://segmentfault.com/a/1190000007996197