`

git使用总结

阅读更多

Git使用说明

 

Linus为Linux Kernel Project发起的版本控制项目。
HEAD代表当前最新状态。
tag为某个状态的标签。
SHA1为每个提交日志的唯一标识。
  
install:
  
apt-get install git-core
  
  
git clone:
  
git仓库可以使用git clone获得:
git clone git://url
  
也可以通过浏览器浏览。
http://url/gitweb/
  
通过git pull更新仓库,使用git init-db初始化自己的仓库。
  
  
config:
  
开发人员需要为git仓库配置相关信息,这样在提交代码时,这些信息会自动
反映在git仓库的日志中。
  
git config user.name "your name"
git config user.email yourname@email_server
git config core.editor vim
git config core.paper "less -N"
git config color.diff true
git config alias.co checkout
  
git config alias表示,可以用git co代表git checkout。git var -l可以查看
已经设置的配置。
  
  
diff:
  
开发人员在本地进行开发后,可以使用git diff查看改动。
除了直接比较当前开发后的改动外,git diff还可以:
  
git diff tag                    比较tag和HEAD之间的不同。
git diff tag file               比较一个文件在两者之间的不同。
git diff tag1..tag2             比较两个tag之间的不同。
git diff SHA11..SHA12           比较两个提交之间的不同。
git diff tag1 tag2 file or
git diff tag1:file tag2:file    比较一个文件在两个tag之间的不同。
  
  
ORIG_HEAD用于指向前一个操作状态,因此在git pull之后如果想得到pull的
内容就可以:
  
git diff ORIG_HEAD
  
git diff --stat                 用于生成统计信息。
git diff --stat ORIG_HEAD
  
  
apply:
  
git apply相当于patch命令。
--check 检查能否正常打上补丁,-v verbose模式, -R reverse模式,反打补丁。
  
  
log:
  
git log file                    查看一个文件的改动。
git log -p                      查看日志和改动。
git log tag1..tag2              查看两个tag之间的日志。
git log -p tag1..tag2 file      查看一个文件在两个tag之间的不同。
git log tag..                   查看tag和HEAD之间的不同。
  
  
commit:
  
git commit -a -e        提交全部修改文件,并调用vim编辑提交日志。
git reset HEAD^ or
git reset HEAD~1        撤销最后一次提交。
git reset --hard HEAD^  撤销最后一次提交并清除本地修改。
git reset SHA1          回到SHA1对应的提交状态。
  
  
add/delete/ls:
  
git add -a              添加所有文件。除了.gitignore文件中的文件。
git rm file             从git仓库中删除文件。
git commit              添加或是删除后要提交。
  
git ls-files -m         显示修改过的文件。
git ls-files            显示所有仓库中的文件。
  
git中有四种对象:blob、tree、commit、tag。
blob代表文件,tree代表目录,commit代表提交历史,tag代表标签。
这四种对象都是由SHA1值表示的。在仓库的.git目录中保存了git管理仓库
所需要的全部信息。
  
git ls-tree HEAD file   显示file在HEAD中的SHA1值。
git cat-file -t SHA1    显示一个SHA1的类型。
git cat-file type SHA1  显示一个SHA1的内容。type是blob、tree、commit、tag之一。
  
patch:
  
git format-patch -1     生成最后一个提交对应的patch文件。
git am < patch          把一个patch文件加入git仓库中。
git am --resolved       如果有冲突,在解决冲突后执行。
git am --skip           放弃当前git am所引入的patch。
  
  
conflict:
  
git merge               用于合并两个分支。
git diff                如果有冲突,直接使用diff查看,
                        冲突代码用<<<和>>>表示。手动修改冲突代码。
git update-index        更新修改后的文件状态。
git commit -a -e        提交为解决冲突而修改的代码。
  
  
branch:
  
git branch -a           查看所有分支。
git branch new_branch   创建新的分支。
git branch -d branch    删除分支。
git checkout branch     切换当前分支。-f参数可以覆盖未提交内容。
  
  
daemon:
  
有时更新公共代码仓库使用patch的方式,或者直接
用git pull git://ip/repo branch
的方式更新每个人的代码。使用git pull的方式需要
提交代码的机器运行:
git daemon --verbose --export-all --enable=receive-pack --base-path=/repo
  
  
request-pull:
  
  
git request-pull start url      用于产生本次pull请求的统计信息。
  
  
clean:
  
  
git clean -dxf          用于清除未跟踪文件。
git clean -dnf          可以显示需要删除的文件,但不包括被.gitignore忽略的。
git reset --hard HEAD   用于清除跟踪文件的修改。

 

Git 配置

Git命令的使用,一般有两种两种形式,一种是git后面带参数(如:git add),另一种是直接减号连接的一条命令(如:git-add),后面讲解全部使用后者,这样可以避免空格的使用带来的问题。

  • $ ssh-keygen -b 1024 -t dsa
  • 生成密钥,用户通信加解密。1024为生成密钥大小,dsa为指定的加密类型。如果接受默认设置,那么私钥和公钥文件分别位于:~/.ssh /id_dsa和~/.ssh/id_dsa.pub。用户需要向服务器管理员提供公钥(id_dsa.pub),在用户同步版本库时对用户进行身份认证。用户必须妥善保管私钥。
  • $ git-config user.name jianjun
  • 配置用户名,在生成补丁、日志时使用。git-config命令带--global选项是对所有用户信息进行配置,默认只针对对当前用户。
  • $ git-config user.email jianjun@zeuux.org
  • 配置用户邮件,用于发送补丁。
  • $ git-config sendemail.smtpserver /usr/local/bin/msmtp
  • 配置补丁邮件的发送软件,这里也可以用其他的,如sendmail。
  • $ git-config --list
  • 用户可以通过git-config的其他选项来对git做其他配置,--list可以查看用户已经选项。如:
    $ git-config --list user.name=jianjun user.email=jianjun@zeuux.com sendemail.smtpserver=/usr/bin/msmtp diff.color=auto pack.window=64 merge.summary=true

3 Git 使用

  • 创建一个版本库
  • $ mkdir myDir $ cd myDir $ git-init-db Initialized empty Git repository in .git/
    创建工作目录 myDir,进入工作目录,并初始化版本库。此时会在myDir/目录下生成一个名为.git的目录,里边有三个文件,分别是存放指向项目当前分支索引信息的HEAD文件、包含项目所有对象的object子目录、保存指向对象索引的refs目录。
  • 植入内容跟踪信息
  • $ echo "new world" > newfile $ git-add newfile
    创建新文件newfile,写入"new world",并用git-add命令将此文件加入到版本库文件索引当中。
  • 提交内容到版本库
  • $ git-commit -m "add newfile" newfile Created initial commit 5ce224d: add newfile 1 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 newfile
    把前面的修改提交到版本库中,前提是已经用git-add命令把此文件加入到版本库文件索引当中。
  • 查看当前的工作
  • $ git-status # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # new file: h $ echo "Love zeuux" >> newfile $ git-diff diff --git a/newfile b/newfile index e83176b..7d02259 100644 --- a/newfile +++ b/newfile @@ -1 +1,2 @@ new world +Love zeuux
    git-status可查看当前分支状态,git-diff查看当前分支更改情况。
  • 管理分支
  • $ git-branch mybranch $ git-checkout mybranch Switched to branch "mybranch" $ git-branch -D mybranch Deleted branch mybranch.
    创建名为mybranch的分支,并把以后工作转移到这个分支上开展。git-branch带-D选项为删除指定的分支,不能删除用户所在当前分支,必须用git-checkout切换到其他分支才行。
  • 查看项目的发展变化和比较差异
  • $ git-show-branch * master mybranch $ git-whatchanged commit 7182ae4912487692d4f91ded1e74d99e0fc12e49 Author: Jianjun Kong Date: Tue Jul 8 23:45:27 2008 +0800 add new line :000000 100644 0000000... 6991a4a... A h commit cc08d852365d605520d71a3352841a7eadf64428 Author: Jianjun Kong Date: Tue Jul 8 23:42:52 2008 +0800 update :100644 100644 7d02259... 033d3e5... M newfile $ git-diff mybranch diff --git a/h b/h new file mode 100644 index 0000000..6991a4a --- /dev/null +++ b/h @@ -0,0 +1,2 @@ +helo
    git-show-branch用来列出当前版本库中的所有分支,git-whatchanged可以列出项目开发中的修改历史。git-dff mybranch是来比较当前分支与mybranch分支的差异的,当然也可使用 git-diff mybranch anotherbranch对任意两个分支做对比。
  • 合并两个分支
  • $ git-checkout master $ git-merge "Merge work in mybranch" mybranch
    切换到master分支,并把mybranch上的工作合并到master上来。此时有可能有冲突无法合并,会给出警告,用户可根据提示手动合并一些文件。
  • 逆转与恢复
  • $ git-reset --soft HEAD^ 逆转上次提交的版本进度                                         1e74d99e0fc12e49 强行逆转到索引指定的版本,--hard选项要慎重使用,有事可能破坏正常文件。 $ git-revert 也可撤销上次对版本库的提交,但这本身也会产生一个commit,用得多了会使log看起来不那么干净。
  • 用 Git 协同工作
  • $ git-clone git://repo.or.cz/xylftp.git 克隆远程版本库 $ git-push git+ssh://kongjianjun@repo.or.cz/srv/git/pigeons.git master:master 将同步本地版本库中master分支同步到远程服务器上版本库的master分支 $ git-pull git+ssh://kongjianjun@repo.or.cz/srv/git/pigeons.git master:master 将远程服务器上的版本库中的master分支同步到本地版本库的master分支 $ git-fetch orign 克隆上游版本库 $ git-format-patch -s orign 0001-add-new-line.patch 对比当前分支与orign生成补丁,-s选项指定生成补丁中带有Signed-off-by: jianjun $ git-send-email --to zeuux-www@zeuux.org --cc wangcong@zeuux.org 0001-add-new-line.patch 将补丁0001-add-new-line.patch发送到zeuux-www@zeuux.org,并抄送一份给wangcong@zeuux.org
  • 为版本库打包
  • $ git-repack 将对象打包,并保存在 .git/objects/pack 目录当中 $ git-prune-packed 清楚那些已经被打过包的原始的对象
  • 特殊文件
  • 工作目录myDir/下有一个名为.gitignore的文件,用来排除一些文件,包括程序编译的中间文件和目标文件等,当然也可包括它自己在内。没用使用git-add添加的文件,不会被跟踪,但会在git-commit等是输出多余信息,也会使日志变得很乱。
    .gitignore .* *.o *.o.* *.a *.s *.ko *.so *.so.dbg *.mod.c *.i *.lst *.symtypes *.order

Git的项目开发模式

Git作为一个正式项目发布系统,它能够极其有效的组织松散的开发人员,是一种非常规的开发组织形式,对工作流程没有任何强迫性的约束,比较灵活。

  • 项目领导人
  • 1.在自己本地机器上创建主版本库,并在此进行所有工作。
    2.准备一个能让大家访问的公共版本库。
    3.将你的主版本库推入公共版本库。
    4.git-repack 公共版本库。这将建立一个包含初始化提交对象集的打包作为项目的起始线。
    5.在你的主版本库中开展工作,包括自己的工作、收到的邮件补丁、“子系统负责人” 的公共库中导入的工作等等。
    6.将项目的进度推入公共库中,并给大家公布一下。
    7.尽管一段时间以后,"git-repack" 公共库。并回到第5步继续工作。
  • 项目的子系统负责人
  • 1.新建一个你自己的工作目录,通过 git-clone 克隆项目领导人的公共库。
    2.准备一个可以给大家访问的公共库,就像项目领导人所做的那样。
    3.复制项目领导人的公共库中的打包文件到你的公共库中。
    4.将你的主版本库推入你的公共版本库,并运行 git-repack,如果你的公共库是通过的公共库是通过pull来导入的数据的话,再执行一下git-prune。
    5.在你的主版本库中开展工作。这些工作包括自己的工作、收到的邮件补丁、“下一级子项目负责人”的公共库中导入的工作等等。
    6.将你的变更推入公共库中,并且请“项目领导人”和“下级子系统负责人”导入这些变更。
    7.每隔一段时间之后,git-repack 公共库。回到第 5 步继续工作。
  • 一般开发人员
  • 1.通过git-clone克隆“项目领导人”的公共库,作为自己的工作库。
    2.在你的个人版本库中的 master 分支中开展工作。
    3.每隔一段时间,向上游的版本库运行一下 git-fetch origin 。这样只会做 git-pull 一半的操作,即只克隆不合并。
    4.用 git-cherry origin 命令,看一下你有什么补丁被接纳了。并用 git-rebase origin 命令将你以往的变更迁移到最新的上游版本库的状态中。
    5.用git-format-patch origin生成email形式的补丁并发给上游的维护者。回到第二步接着工作。

 免费git项目注册

网址:http://repo.or.cz
注册用户:http://repo.or.cz/m/reguser.cgi
注册项目:http://repo.or.cz/m/regproj.cgi
注册用户需要提供自己的公钥,可由上面提到的ssh-keygen生成。

0、使用git-init-db在本地创建版本库; 1、使用git-add添加要跟踪的文件; 2、修改,并使用git-commit提交修改到本地版本库; 3、使用git-push命令将本地版本库同步到服务器端; 4、其他用户可使用git-clone来克隆项目,并在本地开展自己的工作。
---------------------------------------------------------------------------------------------------------------------------------

1.

  *origin(remote) 是Repository的版本
  *master(branch) 是local端,正在修改的版本
  所以平时没事不要用origin,如果用了,可通过 git reset -hard恢复到没修改的状态

2.git新增档案

>git add .  #将资料先暂存到本地,add之后在新增资料,此次commit不会含在里面
>git add filename
>git add modify-file #修改过的档案也要add,不然commit要加上-a参数
>git add -u #只加修改过的档案,新增的档案不加入
>git add -i #进入互动模式

3.git 删除档案
>git rm filename

4.git 修改档案,搬移目录
>git mv filename new-filename

5.git status 查看当前档案状态

6.git commit
>git commit
>git commit -m ‘commit message’
>git commit -a -m ‘commit message’ #将所有修改过的档案都commit,但是新增的档案要先add .
>git commit -a -v #-v可以看到档案的哪些内容被改动了,-a把所有修改的档案都commit

7.产生新的branch
>git branch  #列出目前所有的branch
>git branch new-branch #产生新的branch(new-branch),若没有特别指定,会有目前所在的branch/master直接复制一份
>git branch new-branch master #由master产生新的branch(new-branch)
>git branch new-branch v1 # 由 tag(v1) 产生新的 branch(new-branch)
>git branch -d new-branch # 刪除 new-branch
>git branch -D new-branch # 强制刪除 new-branch
>* git checkout -b new-branch test # 产生新的 branch, 并同时切换过去 new-branch
>git branch -r # 列出所有 Repository branch
>git branch -a # 列出所有 branch

8.git checkout 切换 branch

    * git checkout branch-name # 切换到 branch-name
    * git checkout master # 切换到 master
    * git checkout -b new-branch master # 从 master 建立新的 new-branch, 并同时切换过去 new-branch
    * git checkout -b newbranch # 由现在的分支为基础, 建立新的 branch
    * git checkout -b newbranch origin # 由 origin 的基础, 建立新的 branch
    * git checkout filename # 还原档案到 Repository 状态
    * git checkout HEAD . # 将所以档案都 checkout 出來(最后一次 commit 的版本), 注意, 若有修改的当案都会被还原到上一版. (git checkout -f 亦可)
    * git checkout xxxx . # 将所有当案都 checkout 出來(xxxx commit 的版本, xxxx 是 commit 的编号前四位), 注意, 若有修改的当案都会被还原到上一版.
    * git checkout — * # 恢复到上一次 Commit 的状态(* 改成档案名, 就可以只恢复那个档案)

9.git diff  #查看修改的内容

10.git merge 合并分支

其他常用命令:
git show [commit version] #显示某一次commit的记录
git blame [文件名] #显示该文件的修改历史
git log  [commit version] #显示所有的commit历史记录


我的简单git使用方便自己查看:
git branch #查看当前在哪个分支下
git status  #查看状态
git add .   #快速添加全部修改,不必单个文件逐一添加
git commit -m "new order"  #提交到本地
git checkout master
git pull   #这时将master拉回了本地(下载服务4代码)
git checkout -b ordertest   #在master建分支,此分支和master代码一样
git merge order   #合并order
如果有冲突,在此解决冲突再次add commit merge

git push #提交到服务器
注意:git diff 不带路径参数将查看所有文件的修改
git add . 在文件很多时,可以一次将全部文件添加以待提交(commit), 但删除文件需要使用git rm app/../user.rb,路径参数不能省略
在push之前必须git pull命令, 否则可能覆盖别人的修改

还想继续在order下开发,则checkout order
merge ordertest

1
3
分享到:
评论

相关推荐

    git使用总结.txt

    在IT工作中,经常用到git,在此,对git的一些常用命令做了一下总结,对于git更丰富的用途没有过多涉及。

    git使用总结1

    1.安装完git以后,打开gitbash,鼠标右键可以看到 2.安装完成后,还需要最后一步设置,在命令行输入: 3.创建版本库(目录): 4.先在上面建立的仓库

    git使用总结.docx

    详细git使用文档,欢迎下载,学习,共同进步。

    git常用命令总结git常用命令总结git常用命令总结git常用命令总结

    git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git...

    超级详细的GIT使用教程总结

    git使用说明超级详细的总结分类,使用mindManager完成资源分类

    git命令总结

    Git是目前世界上最先进的分布式版本控制系统。以上为git命令总结。

    git知识点总结

    这是我对git使用的一个总结,对想要了解git如何使用,并致力于理清楚git相关知识点的朋友有所帮助

    Git介绍与使用-培训专用课程PPT

    1、Git介绍和使用教程,主要针对新手入职快速自学git的使用,也可供大佬面向学校或者公司培训使用,根据多年经验总结和整理出来的课程,上手工作使用的git知识这里全都有,如果是想用来制作自己的培训课程的话,简单...

    git常用命令总结.txt

    git常用命令总结

    git总结大全

    总结的git使用大全,和中兴通信的git使用规范。

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

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

    git 学习总结脑图记录git内部原理

    git 学习总结脑图记录git内部原理

    Git使用手册.pdf

    git常用命令总结 分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。 如图1所示是经典的git开发过程。 图1 图1 Git的功能特性: 从一般...

    git学习总结文档,

    git学习,总结,个人实践+廖雪峰老师文档总结。

    java之Git总结笔记

    git是一个分布式的版本控制系统。例如我们一个小团队合作开发一个项目,我们可以先建立一个远程仓库,需求分析,搭建大体框架,将项目框架上传至远程仓库,队员可以git clone项目,各自完成自己负责的部分,完善项目...

    Git命令总结.md集合

    git常用命令总结,包括配置用户、分支操作、更新提交合并、tag、stash、log等命令操作集合

    git常用命令归纳总结

    git是linux系统管理源码常用工具,本资源归纳总结git常用命令使用。

    git讲解与总结

    这是学习过程中总结的一些经验,写成文档,等待大家下载学习和阅读。

Global site tag (gtag.js) - Google Analytics