git使用总结

转载 2013年12月04日 11:48:20

git目前是最流行的代码管理软件,包括Linux kernel源码和android源码都是由git来管理。git使用起来效率高,干净,生成的中间文件不会影响到代码,比起SVN有很大优势。

目前在工作中也是用git来管理源码,这里简单梳理一下使用细节和命令。

在ubuntu系统中安装git

sudo apt-get install git git-core

建立统一的账户来管理git项目,这一点在实际中很需要,避免后期因为多用户的修改提交而产生冲突

sudo adduser git

sudo passwd git

初始化仓库

mkdir project

cd project

git init 

此时在项目文件中多出.git文件夹,通过这个来管理

git add .(要求给当前项目制作一个snapshot)

git commit -m " xxxxxx"

此时远程端git仓库已经建立完毕

 

本地克隆远程端库

git clone username@ip:/source/dest

git config --global user.name "your name"
git config --global user.email  "email@xxxx"

修改文件并提交
*将新增或者修改等变化的文件添加到git的索引(index)中:

git add file1 file2

 

将索引(index)的内容保存到git库中

git commit

 

提交之前,查看修改状态:
git diff --cached
或者
git status 

分支管理:

git branch 查看分支

git branch branch1(建立分支)

git checkout branch1 切换到branch1分支

等效于git ckeckout -b branch1

git merge branch1 合并到branch1分支           //表述有问题,应该是把branch1合并到当前分支,关于分支可看看这篇文章http://blog.csdn.net/hudashi/article/details/7668798

git branch -d branch1 删除分支branch1,根据提示修改错误

git branch -D branch1 强制删除


提交本地分支branch1到远程仓库同样作为branch1分支
git push origin branch1

删除远程仓库中的branch1分支
git push origin :branch1

在使用git push代码到仓库时,遇到如下错误:

[remote rejected]master->master(branch is currently checked out)

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent

这是由于git默认拒绝了push操作,需要进行设置,修改.git/config文件后面添加如下代码:
[receive]
denyCurrentBranch = ignore


开发人员(以下称为本地)和服务器(远端)之间的交流;(以下都在本地进行操作)  

git  push 远端项目路径 本地分支名:远端分支名  

a. 当本地有修改文件时: 
首先提交修改,输入git commit –am “修改说明”   

然后将修改的推到服务器相对应的分支,输入:    

    git push origin test:master    // 合并本地test分支到服务器端master分支 
    git push origin test:test       //合并本地test分支到服务器端test分支, (origin就是克隆时在.git/config文件中自动定义的服务器项目路径,请自行查看)
 
 
需要格外注意的是,git push好像不会自动合并文件。因此,如果git push时,发生了冲突,就会被后push的文件内容强行覆盖,而且没有什么提示。  
如果使用了git init初始化,则远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时,   如果远程仓库正在push的分支上(如果当时不在push的分支,就没有问题), 那么push后的结果不会反应在work tree上,  也即在远程仓库的目录下对应的文件还是之前的内容,必须得使用git reset --hard才能看到push后的内容 
 b. 当本地有新建的分支时: 
首先提交新分支的修改,然后将在本地新建的分支test1推到服务器, 输入: 
   git push origin test1: 远端分支名    

   // 将本地新test1分支推到服务器,查看服务器,此时服务器中多了一个新分支,如果没有输入远端分支名,则服务器上的新分支名和本地分支名(test1)一样;如果有输入远端分支名,则服务器上的新分支名为输入的分支名; 

 c. 删除远程的分支: 
    如果:左边的分支为空,那么将删除:右边的远程的分支,输入: 
   git push origin :test   //远程的test将被删除,但是本地还会保存的

需要格外注意的是,

git push好像不会自动合并文件。因此,如果git push时,发生了冲突,就会被后push的文件内容强行覆盖,而且没有什么提示。

如果使用了git init初始化,则远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时,   如果远程仓库正在push的分支上(如果当时不push的分支,就没有问题)

, 那么push后的结果不会反应在work tree上,  也即在远程仓库的目录下对应的文件还是之前的内容,必须得使用git reset --hard才能看到push后的内容

 

b. 当本地有新建的分支时:

首先提交新分支的修改,然后将在本地新建的分支test1推到服务器, 输入: git push origin test1:远端分支名

// 将本地新test1分支推到服务器,查看服务器,此时服务器中多了一个新分支,如果没有输入远端分支名,

则服务器上的新分支名和本地分支名(test1)一样;如果有输入远端分支名,则服务器上的新分支名为输入的分支名;

c. 删除远程的分支:

如果:左边的分支为空,那么将删除:右边的远程的分支,输入:

 git push origin :test 

//远程的test将被删除,但是本地还会保存的


git  pull 远端项目路径 远端分支名:本地分支名 
a. 当服务器端有修改文件或者补丁时,首先在服务器端必须是提交好的: 
将修改的拉到本地相对应的分支,输入: 
   git pull origin test:master    // 合并服务器端test分支到本地master分支 
   git pull origin test:test       //合并服务器端test分支到本地test分支 
注意:如果在合并的时候有冲突,则手动修改冲突,提交直到没有冲突,再进行合并; 
 b. 当服务器端有新建的分支时: 
首先提交新分支的修改,然后将在服务器端新建的分支test1拉到本地来, 输入: 
   git pull origin test1: 本地分支名    // 将服务器端新test1分支拉到本地,查看本地,此时本地中多了一个新分支,注意:必须输入本地分支名,否则无法查看到(原因待查);

 

Log查看:

git log

git log -p       显示patch

git log --stat   显示改动的一个总结

git log --graph  只显示当前branch的

git log --graph --all    显示所有branch的

git log --graph --all --decorate 显示branch的名字


git log --pretty=oneline, short, full, fuller  输出的log 形式不同

git log --pretty=format:"%h - %an, %ar : %s"   按照指定的格式输出。

关于--pretty的其他选项和具体的format格式,参考 git log --help中PRETTY FORMAT这部分。

git log --follow file.c 这个功能很有意思,尤其是当file.c被移动后。

通常我们会移动某个文件到某个目录下。如果这么做,git log是不能显示目录移动前的记录的。

那就加上 --follow吧。


git log的筛选

git log -2 -p   显示最近两次commit的log 和 diff

git log --author="Author Name" 筛选特定作者的log

git log --since="2012-2-23" --before="2012-2-24" 筛选时间段

git log --grep="key word" 在commit 的message中查找关键字

git log branch --not master 查看在branch上的,但不在master上的记录。



git撤销:

回退到指定版本,清除该版本之后所有的信息:

$ git reset --hard HEAD^(这里可以指定commit,查询得到)

这样将会把当前工作分支的内容回退到"HEAD^"版本。注意,这个命令不仅会把当前的修改给移除,而且还会把自"HEAD^"以后的所有"commit"给删除(HEAD^版本本身保留为当前的HEAD),如果当前的分支是唯一的分支的话,那么运行这个命令之后,之前"HEAD^"以后的修改将会完全丢失(当然可以通过"pull"再将之前的HEAD拉取回来,但是自己没有提交的本地修改是无法找回来的了);另外如果在一个公共的分支上面执行这个命令将会导致其他开发者pull的时候都进行一遍这个清除的工作,如果不加--hard选项,那么可能当前HEAD 基础上有修改的情况导致这个命令不会成功。

 

回退到指定版本,并作为新版本提交上去(保留该版本之后所有的信息):

$ git revert HEAD^

这样只会把内容回退为HEAD^之前的版本(即HEAD^^),再将这样的内容做为新的HEAD提交上去,原来的 HEAD变成HEAD^(即在库中保留HEAD^之后的版本的提交,而不像"reset"那样完全清除)。这里,运行之后,会打开一个编辑窗口让你编辑提交的log信息,退出就直接提交了,或者"revert"命令也有不编辑提交log信息的选项。

HEAD:表示最近一次的commit。(最新版本)
MERGE_HEAD:如果是merge产生的commit,那么它表示除HEAD之外的另一个父母分支。
FETCH_HEAD:使用git-fetch获得的object和ref的信息都存储在这里,这些信息是为日后git-merge准备的。
HEAD^:表示HEAD父母的信息
HEAD^^:表示HEAD父母的父母的信息
HEAD~4:表示HEAD上溯四代的信息
HEAD^1:表示HEAD的第一个父母的信息(和HEAD^相同)
HEAD^2:表示HEAD的第二个父母的信息
COMMIT_EDITMSG:最后一次commit时的提交信息。


转自:http://www.open-open.com/lib/view/open1373377292565.html

Git简介

本文主要内容摘自liyanrui.m2@gmail.com的《Git 使用指南》和Git Community Book 中文版 一、前言    Git 是一个快速、可扩展的分布式版本控制系统,它具...
  • hudashi
  • hudashi
  • 2012年06月13日 22:24
  • 8350

linux教程:Git使用基础篇

Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版本控制工具可以对开发产生如此之多的影响,文章分为两部分,第...

Git的使用总结与远程仓库GitHub

  • 2017年02月28日 14:39
  • 5.01MB
  • 下载

Linux下Git和GitHub使用方法总结

1 Linux下Git和GitHub环境的搭建     第一步: 安装Git,使用命令 “sudo apt-get install git”     第二步: 创建GitHub帐号     第三步: ...

Git和GitHub简单使用总结

GIT 相比CVS/SVN,Git 的优势: - 支持离线开发,离线Repository - 强大的分支功能,适合多个独立开发者协作 - 速度块  GitHub GitHu...
  • Daisy09
  • Daisy09
  • 2012年12月23日 15:32
  • 669

git使用总结。分支管理,版本跳转回退

git checkout作用于工作区。reset还原来自版本库 master是一个指向快照的指针。HEAD可以指向master也可以指向其他的分支比如dev,feature,issue等等。都可以的。...

#版本管理工具使用总结(git,svn,hg)

git一、git常用命令1提交代码 git add . //把修改的或增加的文件添加到本地库里 git commit -am “说明性文字” git pull ...

HighCharts画图/请求路径/git使用总结

1、利用highcharts画柱状图  (1)为了让每个柱上面显示相应的值,在highcharts的option设置如下参数: plotOptions: { series...
  • cwzhsi
  • cwzhsi
  • 2015年05月31日 21:46
  • 672

Git的一些使用规则总结

在github.com上申请完账户以后,让账户跟自己的mac相连,来保证项目的上传,生成public key 添加到自己的账户中! ssh-keygen -t rsa -C "xxxxx@xxxxx...
  • GBKing
  • GBKing
  • 2016年09月19日 15:52
  • 177

Eclipse中Git的使用--学习总结

此文档主要介绍了如何通过Eclipse中的Git工具将项目代码提交到GitHub。主要包含的内容有:前期需要准备的工作、如何将代码提交到GitHub、如何从GitHub导出代码。如果发现文档中的错误之...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:git使用总结
举报原因:
原因补充:

(最多只允许输入30个字)