git学习心得总结

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到很是大的项目版本管理linux

有两种取得 Git 项目仓库的方法。git

第一种是在现存的目录下,经过导入全部文件来建立新的 Git 仓库。github

第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来。编程

一.从当前目录初始化 Git init安全

初始化后,在当前目录下会出现一个名为 .git 的目录,全部 Git 须要的数据和资源都存放在这个目录中。app

二.git clone ssh://r10003@192.168.10.124/git/mx28/linux-2.6-imx.gitssh

将远程仓库克隆到本地,目录名为linux-2.6-imx并在目录下建立.git目录。若是但愿在克隆的时候,本身定义要新建的项目目录名称,分布式

能够在上面的命令最后指定:/linux-2.6-imx.git  Mylinuxsvn

SSH 为创建在应用层和传输层基础上的安全协议。工具

在客户端执行

Ssh 用户名@192.168.10.124  //使用192.168.10.124某一指定的用户名和密码登录

后面的git/mx28就是目录了

 Git中从远程的分支获取最新的版本到本地有这样2个命令:相反就有一个命令

git fetch:至关因而从远程获取最新版本到本地,不会自动merge

git fetch origin master
git log -p master..origin/master
git merge origin/master

以上命令的含义:

   首先从远程的origin的master主分支下载最新的版本到origin/master分支上
   而后比较本地的master分支和origin/master分支的差异
   最后进行合并

git pull:至关因而从远程获取最新版本并merge到本地

git pull origin master

上述命令其实至关于git fetch 和 git merge
在实际使用中,git fetch更安全一些
由于在merge前,咱们能够查看更新状况,而后再决定是否合并

git pull origin master是将origin这个版本库的代码更新到本地的master主分支

git log    查看提交信息  看你commit的日志

git log -p    查看历次的log信息及更改状况   看到的是跟补丁同样的修改信息

git log -p -4    查看距如今最近的4次的log信息及更改状况

git log frameworks/    查看关于frameworks/目录修改相关的log信息

git log --stat    查看log显示文件修改状况

git log --stat packages/apps/Contacts/    查看关于packages/apps/Contacts/目录修改相关的log显示的文件修改状况

git与gitk的区别

有时候图形化工具更容易展现历史提交的变化,随 Git 一同发布的 gitk 就是这样一种工具。它是用 Tcl/Tk 写成的,基本上至关于 git log 命令的可视化版本,凡是 git log 能够用的选项也都能用在 gitk 上。在项目工做目录中输入 gitk 命令后。上半个窗口显示的是历次提交的分支祖先图谱,下半个窗口显示当前点选的提交对应的具体差别。

git status    查看工做目录和代码仓库的改动状况

git diff 查看工做目录和本地仓库的差别或者本地仓库各个版本的差别

git diff 会使用文件补丁的格式显示具体添加和删除的行。

请注意,单单 git diff 不过是显示尚未暂存起来的改动,而不是此次工做和上次提交之间的差别。因此有时候你一会儿暂存了全部更新过的文件后,运行 git diff 后却什么也没有,就是这个缘由。 能够cat diff看一下实际的输出信息 cat: diff: No such file or directory

git diff packages/apps/Contacts/AndoridManifest.xml    查看工做目录中AndoridManifest.xml和本地仓库中AndoridManifest.xml的不一样

git diff b46cae3b9a377bcd9cfc249a5778fce647feb961 dc94bf29aab18168e79d6496a89e47dba7a1d494    查看这两个版本的不一样(git diff history_old history_current)

git commit 提交当前修改内容 提交只是提交到本地仓库

git commit file1 file2 -m "log message"    提交file1,file2到本地仓库

git commit -a -m "log message" 提交全部在Git索引中的改动  有-a表明不用add了

有时候咱们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操做,可使用 --amend 选项从新提交:

$ git commit -m 'initial commit'

$ git add forgotten_file

$ git commit --amend

上面的三条命令最终获得一个提交,第二个提交命令修正了第一个的提交内容。

git add 增长文件到Git索引

git add file3 file4    将file3,file4加入到Git索引中   git add 仅是暂存不是提交

git rm 从Git索引移除文件

git rm file3    将file3从Git索引中删除

git branch    对分支的增、删、查操做

git branch    显示全部本地分支

git branch new_branch    在当前版本建立一个名为new_branch的分支

git branch -D new_branch    强制删除名为new_branch的分支

git checkout    在不一样的branch切换和还原文件

git checkout branch1    切换到branch1分支 切换前最好把工做目录add并提交 不然切换后会报错或者工做目录不换还原

git checkout /packages/apps/Contacts/AndroidManifest.xml    会将AndroidManifest.xml文件从上一次提交的版本更新回来,未提交的部分会所有回滚   

git remote查看当前配置有哪些远程仓库

git remote add pb git://github.com/paulboone/ticgit.git要添加一个新的远程仓库,能够指定一个简单的名字,以便未来引用

git remote show origin查看某个远程仓库的详细信息

git tag列显已有的标签

git tag -a v1.4 -m 'my version 1.4'建立一个含附注类型的标签 V1.4

git revert 是撤销某次操做,这次操做以前的commit都会被保留

git reset 是撤销某次提交,可是这次以后的修改都会被退回到暂存区

git reset 将当前的工做目录彻底回滚到指定的版本号

git reset [--fixed] 3204f2f0bdfd6ada86c587b8927cdc5a15c586c1    只更新索引,不更新工做目录,也就是说全部的本地文件都不会更新

打补丁

一.方法一比较通用

Git commit  好比在PATH分支提交后

Git diff master>patch 建立补丁文件

Git checkout master 回到主分支

Git apply patch 经过patch打补丁

二.

Git conmmit 先在一个分支提交

Git format_patch –M master 生成.patch补丁文件

Git checkoutmaster 回到须要打补丁的分支

Git am ***.patch 打补丁          打完补丁至关于完成一次提交

遇到问题  错误提示信息

previous rebase directory /home/hailong/Workspace/zhl/.git/rebase-apply still exists but mbox given.

在用git am提交patch时,有时在提交失败后,继续提交时会出现/.git/rebase-apply still exists but mbox given错误,由于错误的提交致使git内部的数据出现了错误,所以继续提交patch就会报错,1.使用git am --abort命令将git的状态恢复到以前状态就能够继续提交patch了。2. 直接删除/home/hailong/Workspace/zhl/.git/rebase-apply这个目录的。

每次提交patch以前须要执行review-commits命令来检查patch的编程规范,有错误的地方,都会有warning或error的提示,修改以后执行1. git add xxx 2. git commit –amend 再push。

git能够学习的东西还有不少。git协议,分布式协做,git项目管理,git技巧,github的使用和实践,git分支管理的深刻理解和使用,这些估计要之后慢慢学习了。毕竟咱们公司用svn,并且没有开发大型项目。学到这个程度,基本达到个人目的:能应用git来管理本身的代码,能用git来链接svn进行部门补丁管理,扩展本身的知识面,了解开源项目的开发。之后有机会能够经过开源项目进一步学习。

相关文章
相关标签/搜索