cd
到当前文档git init
初始化gitgit add -A
将所有文件提交到暂存区git commit -m "xxx"
将所有暂存区文件提交仓库git remote add origin git@github.com:xiucode/font-end-beginner.git
对接远程库git clone git@github.com:xiuocde/gitskills.git
直接把远程仓库克隆到本地git fetch origin
从远程库拉取内容到本地,不合并git pull
从远程库拉取内容到本地,并且合并 git push origin master
将本地仓库推送到远程仓库git pull
根据远程仓库更新本地仓库对于任何一个文件,在 Git 内都只有三种状态:已提交 (committed),已修改(modified)和已暂存(staged)。
已提交表示该文件已经被安全地保存在本地数据库中了;
已修改表示修改了某个文件,但还没有提交保存;
已暂存表示把已修改的文件放在下次提交时要保存的清单中。
由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的本地数据目录,工作目录以及暂存区域。
请记住,工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪。
已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。
初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,然后等 最后一次性提交暂存区域的所有文件更新,如此重复。
Git 提供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个 名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在 各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
|
如果用了 —global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默 认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 —global 选项重 新配置即可,新的设定保存在当前项目的 .git/config 文件里。
git init
:要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录
git add *.c
:开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时 把有冲突的文件标记为已解决状态等
git clone git://github.com/schacon/grit.git mygrit
克隆仓库,并命名为mygrit
git status
:查看文件状态
git cat readme.txt
抓取当前的文件,打开查看内容
cat .gitignore
:忽略某些文件
|
git diff
: 比较的是工作目录中当前文件和暂存区域快照之间的差异
git diff --cached
: 已经暂存起来的文件和上次提交时的快照之间的差异
git diff HEAD -- readme.txt
: 工作目录中文件与仓库中文件的比对
$ git commit
:提交命令
$ git commit -m "Story 182: Fix benchmarks for speed"
也可以使用 -m 参数后跟提交说明的方式
git commit -a -m 'added new benchmarks'
给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂 存起来一并提交,从而跳过 git add
git reset --hard HEAD^
回溯到上一个版本,上上个版本用HEAD^^
git reset --hard id
回溯到id号指示的那一个版本
git reflog
展示你对仓库的所有操作轨迹,这样即使你删除了某一个版本(git log无法显示此删除版本的id号码),也可以荣国reflog重新找到你的那次操作,从而查到id号码
|
rm test
:简单的移除工作文件操作
git rm test
git commit -m "remove the test"
:移除该文件的版本库中的文件
git checkout -- test
如果只是删除了工作区中的文件,可以从版本库中还原删除的文件
git rm -f test
:当文件已经存在于暂存区的时候,删除工作文件
git rm --cached test
:当文件已经存在于暂存区的时候,删除暂存文件
git mv README.txt README
:文件重命名,并同时自动设定跟踪新文件
git checkout -- benchmarks.rb
取消文件修改(工作区的文件),回退到上一次add或者commit之后的状态,用版本库/暂存区里面的版本替换工作区的版本,如果文件在暂存区和版本库都有,则用暂存区的版本来替换掉
git reset HEAD readme.txt
取消文件修改(提交到暂存区文件),将文件放回工作区,HEAD表示最新版本
git log -p -2 --stat
查看操作历史,我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新,—stat仅仅显示简要的增改行数变化
git log --pretty=oneline
单行显示
$ git log --pretty=format:"%h - %an, %ar : %s"
定制要显示的记录格式,这样的输出便于后期编程提取分析
$ git log --pretty="%h:%s" --author=gitster --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/
加上时间段和确定作者的输出
$ git commit --amend
重新提交(比如刚才提交后发现修改有错误或者忘记add一些文件)
gitk
图形界面
git lg
自己编辑的五彩斑斓log
$ git remote -v
查看远程库(包含远程库的地址),显示抓取和推送的origin地址
|
$ git remote add pb git://github.com/paulboone/ticgit.git
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用
$ git fetch pd
此命令会到远程仓库中拉取所有你本地仓库中还没有的数据,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好 了,才能手工合并
git pull
从原始克隆的远 端仓库中抓取数据后,合并到工作目录中当前分支
$ git push origin master
将本地仓库中的数据推送到远程仓库,如果
在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本
地,并到自己的项目中,然后才可以再次推送。
$ git push origin dev
推送其他的分支
git checkout -b dev origin/dev
创建本地分支并且对接云端已有的dev分支,方便push
不同的推送需求
git remote show origin
查案远程仓库详细信息
|
实际情况比较复杂:
|
运行 git push 时缺省推送的分支是什么(译注:最后两行)。
它还显示了有哪些远端分支还 没有同步到本地(译注:第六行的 caching 分支),哪些已同步到本地的远端分支在远端服务器上已被删除(译注:Stale tracking branches 下面的两个分支)
以及运行 git pull 时将自动合并哪些分支(译注:前四行中列出的 issues 和 master 分支)。
$ git remote rename pb paul
远程仓库的重命名
$ git remote rm paul
移除远端的某一个仓库
cd 当前git目录
首先定位到当前的目录learngit
git remote add origin git@github.com:xiucode/learngit.git
git push -u origin master
-u的意思是不近将本地的master推送到远程github上的master,并且进行分支的合并关联git push origin master
之后,只要本地提交到仓库,直接用这段命令就可以实现同步git clone git@github.com:xiuocde/gitskills.git
直接把远程仓库克隆到本地cd
到当前文档git init
初始化gitgit add -A
将所有文件提交到暂存区git commit -m "xxx"
将所有暂存区文件提交仓库git remote add origin git@github.com:xiucode/font-end-beginner.git
对接远程库git fetch origin
从远程库拉取内容到本地,不合并git pull
从远程库拉取内容到本地,并且合并 git push origin master
将本地仓库推送到远程仓库git pull
根据远程仓库更新本地仓库$ git tag
列出现有的标签
$ git tag -l 'v1.4.2.*'
列出v.1.4.2的系列版本
$ git tag v1.4
给对象加一个轻量级标签(无说明文字)
$ git tag -a v1.4 -m 'my version 1.4'
给对象加一个重量级标签(带说明文字)
$ git tag v1.4 fa89asf9
给非当前commit的旧分支打标签只需要制定他的id
$ git tag -d v1.4
删除某一个标签
$ git show v1.4
查看该标签对应对象的版本信息(和直接show + name用法一样,都是show)
在后期对早先的某次提交加注标签(只需要提供校验的前几位字符即可)
|
$ git push origin v1.5
把标签传到服务器上
$ git push origin --tags
一次把所有标签一起传到服务器上
$ git push origin:refs/tags/v1.4
把推送的标签从云端删除
git branch
查看当前的分支
git checkout -b branch1
创建并且切换到分支branch1
git branch branch1
创建分支,但不切换到该分支
git checkout master
切换分支
git merge
合并分支
git branch -d branch1
删除branch1分支
git branch -D branch1
强行删除没有合并过的分支
当出现merge conflict冲突的时候,conflict出现的部分会相应的显示到当前分支文件中,我们只需要修改当前分支文件,使其符合自己原本期望的更改状态,然后重新提交,再删除合并分支即可
git merge --no-ff -m "merge with no ff" dev
git stash
可以暂存当前的编辑状态,比如你突然接到一个调bug的任务,但又不想提交现在的dev,就可以用stash暂存当前的编辑状态,等bug调完再回来搞dev分支
git stash pop
恢复现场并且删除刚才保存的stash
git stash apply stash@{0}
恢复一种一个现场但不删除刚才的stash
选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字串 %h 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 %p 父对象的简短哈希字串 |
%an | 作者(author)的名字 |
%ae | 作者的电子邮件地址 |
%ad | 作者修订日期(可以用 -date= 选项定制格式) %ar 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 %s 提交说明 |
选项 | 说明 |
---|---|
-p | 按补丁格式显示每个更新之间的差异。 |
—stat | 显示每次更新的文件修改统计信息。 |
—shortstat | 只显示 —stat 中最后的行数修改添加移除统计。 |
—name-only | 仅在提交信息后显示已修改的文件清单。 |
—name-status | 显示新增、修改、删除的文件清单。 |
—abbrev-commit | 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 |
—relative-date | 使用较短的相对时间显示(比如,“2 weeks ago”)。 |
—graph | 显示 ASCII 图形表示的分支合并历史。 |
—pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。 |
选项 | 说明 |
---|---|
-(n) | 仅显示最近的 n 条提交 |
—since, —after | 仅显示指定时间之后的提交。 —until, —before 仅显示指定时间之前的提交。 |
—author | 仅显示指定作者相关的提交。 —committer 仅显示指定提交者相关的提交。 |
联系客服