git的使用

git教程

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 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

 

本人的一篇关于git和svn区别的文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值