git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)

时间:2023-03-09 19:59:17
git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)

每次git提交,都会有一个parent指针,指向上一次的commit

git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
如果合并,master就和hotfix河道一起,就直接删除hotfix就OK
git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
此时,虽然操作一样,大底层实现不一样,要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
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学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)

git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
衍合步骤:
git co experiment
git rebase master
git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
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学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
给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学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
git merge origin/master 合并origin/master 和master
git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
然后,执行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权威指南