9

git分布式版本控制系统

 3 years ago
source link: http://abcdxyzk.github.io/blog/2012/02/25/tools-git-base/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

git分布式版本控制系统

2012-02-25 14:44:00

git 本地强制更新

用git pull -f,提示 You have not concluded your merge. (MERGE_HEAD exists)。

git fetch --all
git reset --hard origin/master

git fetch 只是下载远程的库的内容,不做任何的合并git reset 把HEAD指向刚刚下载的最新的版本


【GIT 基础】

GIT 使用 SHA-1哈希码(40个字符)来标识提交,同时保证本次提交后整体(一个快照)的完整性。

文件状态:

文件状态分为:未跟踪(untracked) 和已跟踪 (tracked),已跟踪又分为三种状态:已暂存(staged),已修改(modified),已提交(committed)

一般过程如下:

0) 用 git pull 下载远程代码库代码
1) 新建文件,该文件状态为“未跟踪”,位于工作区;
2) 用 git add a.txt 加入该文件,状态变为已跟踪的“已暂存”,位于暂存区;
3) 用 git commit a.txt -m "ha" 提交该文件,状态变为“已提交”,位于代码库(repository )
4) 用 git push 提交到远程代码库

注意:用 git status 查看目前所有文件的状态。

GIT 配置:

三种配置范围类型:

1)所有用户 --system,  存在 /etc/gitconfig 文件中。(对windows来说,是msysgit 的安装目录)
2)本用户 --global,   存在 ~/.gitconfig 文件中。(对windows 来说,是 C:\Documents andSettings\$USER)
3)本项目            存在 .git/config 文件中。

注意:后面的重载前面的。例如:用–global设置,可以在所有项目中使用这个设置;如果有一个项目你想使用一个特别的设置,就可以使用不带参数的git config 重新设置,则它只作用于这个项目。如果用 git config –list 查看这些设置,可能会列出多个,但最后那个起作用。

$ git config --global user.name "John Doe"  
$ git config --global user.email  
文本编辑器  
$ git config --global core.editor vim  
查看配置信息  
$ git config --list  
或者只看一个信息:  
$ git config <key>

【常用操作】

$ git grep XXX                       查看某个关键字
$ git init                        初始化仓库,如果该目录有文件,则都会处于“未跟踪”状态的。
$ git clone git://github.com/schacon/grit.git mygrit  克隆仓库,并换个名字
说明: 
	通过git clone获取的远端git库,只包含了远端git库的当前工作分支。
	如果想获取其它分支信息,需要使用 “git branch –r” 来查看, 
	如果需要将远程的其它分支代码也获取过来,可以使用命令 “ git checkout -b 本地分支名 远程分支名”,
	其中,远程分支名为 “git branch –r” 所列出的分支名, 一般是诸如“origin/分支名”的样子。
	如果本地分支名已经存在, 则不需要“-b”参数。
$ git add readme.txt                  跟踪一个新文件:                                                 
说明: 
	1) 跟踪之后,该文件状态是“已暂存”的。 (Changes to be committed:)
	2) 修改一个已暂存的文件,该文件会出现在两个记录区中。
	3) 如果跟踪错了,想把他删除(不删除工作区的),则用 git rm --cachedreadme.txt。
	   状态变成“未跟踪”,如果该文件已经修改了,则加  -f参数强行删除暂存区的文件(已修改的文件不被覆盖)。
$ git commit -m "fix bug1"                提交更新

$ git diff                        查看尚未暂存的更新,比较“已修改”和“已暂存(或已提交)”。
$ git diff --cached 或 $ git diff --staged       查看尚未提交的更新,比较“已暂存”和已提交。
$ git rm -f a.a                       强行移除修改后文件(从暂存区和工作区中删除)
$ git mv file1 file2                  改名(只改工作区和暂存区)
$ git stash                       将你当前未提交到本地(和服务器)的代码推入到Git的栈中 
$ git stash apply                 将Git的栈中代码恢复
$ git commit --file notefile              从文件中取注释
$ git checkout A.java                 抛弃已修改,用已提交覆盖,此命令对已暂存文件没作用。 
$ git rm --cached A.java              移除已跟踪文件,恢复到“未跟踪”,如果文件已修改,则需-f,并且不覆盖修改过的内容。 
$ git reset HEAD readme.txt              取消已暂存的文件(已暂存到已修改)
$ git reset --hard HEAD                   重置所有修改,就像没有修改过一样。
$ git reset --hard HEAD~3             最新的3次提交全部重置,就像没有提交过一样。
说明:
	--hard reset后再执行 git push origin HEAD --force 也将删除远程的提交。

历史查看:

$ git show 356f6def9d3fb7f3b9032ff5aa4b9110d4cca87e  显示具体的某次的改动的修改
$ git log                     查看提交历史(全部)
$ git log --stat                  查看提交历史,并显示统计信息
$ git log -p -2                       查看最近2次提交历史并查看差异
$ git log --since=2.weeks             查看最近2周内提交历史
$ git log --since="2008-09-14"                查看某个时刻之后的提交历史
$ git log --until="2008-09-14"                查看某个时刻以前的提交历史
$ git log --author="stupid"               查看某个作者的提交历史
$ git log --pretty=oneline                列出所有改动历史
$ git log --pretty=format:"%h - %an, %ar : %s"        查看提交历史,并格式化显示
例如:
	$ git log --pretty=format:"%h - %an, %ar : %s"
	ca82a6d - Scott Chacon, 11 months ago : changed the versionnumber
	085bb3b - Scott Chacon, 11 months ago : removed unnecessary testcode
	a11bef0 - Scott Chacon, 11 months ago : first commit
 
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%cr 提交日期,按多久以前的方式显示
%s 提交说明
 
$ git log --pretty=format:"%h %s" --graph查看提交历史,并图形化显示
例如:
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
*  5e3ee11 Merge branch 'master' ofgit://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
*  11d191e Merge branch 'defunkt' into local
 
其它:
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和format(后跟指定格式)。

忽略某些文件——很有用

在.gitignore 文件中加入需要忽略的内容

*.a          # 忽略所有 .a 结尾的文件
!lib.a            # 但lib.a 除外
/TODO         # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/            # 忽略build/ 目录下的所有文件
doc/*.txt     # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

注意:.gitignore 文件放在工程的根目录即可,但是要把它用 git add 加入跟踪或者提交。

Posted by kk

2012-02-25 14:44:00tools, git

« irssi html基础 »


Recommend

  • 62

    研发机器人控制系统 “艾利特”获得5000万元A轮融资 ...

  • 60

    版本控制工具大概有:RCS单机版CVS、SVN集中式版本控制系统GIT分布式版本控制系统这里介绍GIT,它四大位置:本地代码工作区---待提交列表staging area---本地仓库local repo---远程仓库remote repo(git服务器)。从左往右是上传代码,从右往左是下载代码。备注1:...

  • 27

    分布式相比于集中式的最大区别在于开发者可以将代码提交到本地,每个开发者通过克隆,在本地机器上拷贝一个完整的git仓库。下图是经典的git开发过程:git的功能特性如下:从服务器上克隆完整的git仓库(包括代码和版本信息)到单机上;在自己的机器上根据不同的开...

  • 19

    1,远程仓库概念在上篇博文中,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,再也不用担心文件备份或者丢失的问题了。可是有用过集中式版本控制系统SVN的朋友会站出来说,这些功能在SVN里早就有了,没看出Git有什么特别的地方。Git是分布式版本控制系统...

  • 8

    自 2014 年大学毕业以来,我一直从事代码托管相关工作,工作的内容和 git 相关,期间积累了很多心得体会,这大概是一般的 git 使用者很少会感知到的,一直以来,我也想将这些见解分享给大家,之前我写过《探讨 Git 代码托管平台的若干问题 - 2019 版》,这篇文...

  • 3

    Tango Controls首页、文档和下载 ...

  • 5
    • junhaideng.github.io 2 years ago
    • Cache

    cargo 中的语义版本控制系统

    8 个月前发表Rust / Note4 分钟读完 (大约588个字)7 次访问

  • 3

    Subversion 是一个开源版本跟踪系统。它将文件保存在中央存储库中,并提供对目录或文件的版本控制。作为开发人员,您可以从存储库中提取项目文件,对其进行更改,然后再次将其推回。Subversion 还有一个服务器组件,您可以使用它来托管您的项目。它的工作原理...

  • 11

    Subversion 是一个开源版本跟踪系统。它将文件保存在中央存储库中,并提供对目录或文件的版本控制。作为开发...

  • 7

    一篇文章带你了解热门版本控制系统——Git 这篇文章会介绍到关于版本控制的相关知识以及版本控制神器Git 我们可能在生活中经常会使用GitHub网页去查询一些开源的资源或者项目,GitHub就是基于Git而产生的平...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK