每次git提交,都会有一个parent指针,指向上一次的commit
,
如果合并,master就和hotfix河道一起,就直接删除hotfix就OK
此时,虽然操作一样,大底层实现不一样,要xinchuangjian一个C6分支,master到C6分支。
git commit --amend
在多次修改之后,就用该命令,amend很重要,不需要再建立另外一个连接,在刚才提交的修改信息上就OK
github:
http://blog.sina.com.cn/s/blog_67a3453d0101j8qr.html
git --global user.name 'wang'
git --global user.emlai 'efeff@.com‘
git commit --amend --reset-author
gitconfig配置文件
git tag -a v1.0 -m 'myversion' 添加版本标签
git show 显示版本信息
git log 日志
git checkout -b 'affs' 新建并切换到当前分支
git merge 合并分支
git branch 如果不加参数则说明显示所有分支
git init 初始化项目仓库
远程仓库,现在要建一个网页版本,
gerrit看需不需要注册
git clone www.
自动命名为origin
一次Git 克隆会建立你自己的本地分支master 和远程分支origin/master,
它们都指向origin/master 分支的最后一次提交。
git fetch 同步服务器上的数据
git push (远程仓库名) (分
支名):
$ git push origin new_branch(要推的分支)
如果此时另外一个人用git fetch 了
他还无法直接开发,要用:
git checkout -b serverfix origin/new_branch
即在远程分直接出上键一个分支
注意在删除文件或添加文件时,有时需要执行两次执行add命令,才能保存已存。
不管删除还是添加,在你执行commit后都会显示出来。
比如: 2 files changed ,1 files added ,deleted phont.py
STEP:
1.创建SSH Key
ssh-keygen -t rsa -c "haib.wang@hotmail.com"
此时会生成.ssh文件,然后找到.pub文件,拷贝里面的ssh key 。
2.到github主页上,添加 SSH Key
ssh -T git@github.com
3.将本地仓库代码传到github上
先配置
git config --global user.name "hbnn"
git config --global --reset-author
git remote add origin git@github.com:hbnn/My_paper.git
git clone git@github.com:hbnn/Python_PYQT.git
提交、上传
git push origin v5(版本信息)
标准的提交版本信息:
1、创建里程碑
git tag -m "Release v1.0" v1.0
git push origin refs/tags/v1.0
git push origin master
-
为版本库添加名为origin的远程版本库。
$ git remote add origin git@github.com:gotgithub/helloworld.git
-
执行推送命令,完成GitHub版本库的初始化。注意命令行中的-u参数,在推送成功后自动建立本地分支与远程版本库分支的追踪。
$ git push -u origin master
refs/heads/ 存放的是本地分支的哈希值;
refs/remotes/ 存放的是远程分支的哈希值;
refs/tags/ 存放的是tags的哈希值;
Git 自动维护几个symrefs ,在任何时候都可以标识某次提交。
HEAD
标识当前分支的最后一次提交,当你变换分支,HEAD也换成新分支的最后一次提交。 ORIG_HEAD
某些操作,如执行merge ,reset时,ORIG_HEAD 记住了变更时的版本,你可以用ORIG_HEAD去恢复到上一次版本。 FETCH_HEAD
MERGE_HEAD
Git rebase
一般在将服务器最新内容合并到本地时使用,例如:在版本C时从服务器上获取内容到本地,修改了本地内容,此时想把本地修改的内容提交到服务器上;但发现服务器上的版本已经变为G了,此时就需要先执行Git rebase,将服务器上的最新版本合并到本地。例如:
用下面两幅图解释会比较清楚一些,rebase命令执行后,实际上是将分支点从C移到了G,这样分支也就具有了从C到G的功能。
衍合步骤:
git co experiment
git rebase master
git学习记录:
切换到不同目录
删除远程分支:git push origin :branch_name
注意origin与冒号之间一定要有空格。
git checkout -- benchmarks.rb 取消对该文件的修改。
移除远程仓库也可以用:git remote rm paul
$ git remote origin
文件的3个状态(很重要)
已提交;已修改;暂存;
已提交就是commit之后的文件
已修改就是你进行修改之后的(modify)
暂存文件就是修改后放入暂存区域(修改后执行,git add)提示,changed to be commited
如果添加新文件,编辑后还不是跟踪文件(提示untracked files)
给git commit 加上-a 选项,Git 就
会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add 步骤.不过要注意,这里只是所有已经跟踪过得文件,如果是未跟踪的,比如新添加的文件,就需要先执行git add。
删除文件git rm。如果删除之前修改过并且已经放到暂存区
域的话,则必须要用强制删除选项-f(译注:即force 的首字母),以防误删除文件后丢失
修改的内容。
git reset HEAD benchmarks.rb取消已经修改并暂存的文件。
git checkout -- benchmarks.rb 取消对文件的修改
git mergetool 可视化图形工具,用于引导你解决冲突。
注意与远程的交互:
假如你同步了服务器上的数据
此时origin/master与master指向同一个版本,当你在本地修改master文件时,master指针向前移,但是origin/master并没有移动,而此时服务器上的数据,由于别人的推送,又有了新的更新,你执行 git fetch origin 就会出现如下图所示:
git merge origin/master 合并origin/master 和master
然后,执行git push origin master, origin/master和master就合并了。
git push origin featureB:featureBee(服务器上另一个人建的分支),将自己的分支推到另外一个人建的分支)
git checkout -b serverfix origin/serverfix 该命令是在远程分支的基础上新建的一个分支,内容和远程分支内容是同步的。
git 学到127页。
repo
repo是用来管理Android项目的,是用python写的脚本。简化了对多个git版本库的管理,是git的封装。
repo init 是克隆Android的一个清单库,是通过XML技术建立的版本库清单。
清单库的manifest.xml文件有160多种版本库的克隆方式。然后reposync 进行同步。
repo init:
repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0
-u 该参数指定清单库的git服务器地址。
-b 检出清单库德尔特定分支
-m 当有多个清单文件时,可以指定清单库中的某个清单文件时有效的清单文件,默认的为default.xml。他是在.repo/manifest中,.repo/manifest.xml只是一个符号链接,它实际上也是指向上个.xml文件。
在manifest.xml文件中:
<?xml version="1.0" encoding="UTF-8"?>
2 <manifest>
3 <remote fetch="ssh://gerrit.lud.stericsson.com:29418/" name="m74x0" review ="http://gerrit.lud.stericsson.com/gerrit"/>
4
5 <default remote="m74x0" revision="ste-dev-br1"/>
remote定义的是远程版本库,review是定义了代码审核服务器,git一般是与gerrit合用。这里就是gerrit服务器。
default是设置默认的远程版本库和默认的分支revision。
<project groups="swpf_app,host_if,sipc_oem,wifi_extensions" name="android/ platform/vendor/st-ericsson/hardware/mpl" path="modem/datacom/ip/cnh1608154_ mpl" revision="fac095796825288882670d7f0a01ea7f5a83b73f"/>
一共有很多的project,语法都相同。
git push m74x0 HEAD:refs/for/ste-dev-br1
ste-dev-br1 是在.repo/repo/.git/remotes中
repo sync 同步所有的版本库,第一次执行就是克隆,再次执行就是更新。
当然可以指定特定的项目(project)
repo start实际是对git checkout -b命令的封装。
repo checkout 相当于git checkout
repo upload 相当于git push
repo prune 相当于 git branch -d
参考资料:
【1】git手册
【2】 Git权威指南