有关GIT
今天上班,发现没什么事情。
就看了一些博客,发现有个不错的东西,分享一下。
参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000
命令: http://www.cnblogs.com/constantince/p/5086907.html
Git:这东西对于开发人员来说,必不可少的。是一个分布式代码管理的东西。
非常实用,简单说就是记录代码更新(增,删,修)相关的操作。对于多人合作开发很有用。
也可弄个code review的一个网站,在那里可以通知合伙人检查本次代码修改。进一步merge到一个branch中。
+Tips(附加项):
1) 不想自己在Linux中搭载Git,可以用Git hub这个网站。
2) 想在Window上操作Linux可以用软件Putty。简单说这个工具可以直接用一个IP地址访问Linux系统。别忘了编码设置为UTF-8
3) Eclipse Git 相关:http://wenku.baidu.com/link?url=k5Y0JcG77hP-3TyZY0eEa_HRPwtqJj66gY5QFHxyKWTVpphD7KHMvCiNGv3TxSEQUyW8PKtRtWLtdXb5g68ahgicPMbQGNzR3HKByZKjTye
Linux 安装GIT:
- $sudo apt-get install git
- #或者sudo apt-get install git-core
- #或者直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。
GIT可以安装在Window/Mac 可以参考参考网站。
安装完成后,还需要最后一步设置,在命令行输入:
- $ git config --global user.name "Your Name"
- $ git config --global user.email "email@example.com"
这个信息用于以后代码更新了,方便发送email通知。应该还有其他的用处就不用考虑。
创建GIT Repository(仓库):
- $ mkdir learngit
- $ cd learngit
- $ pwd
- /Users/michael/learngit
先创建一个文件夹(lerngit),然后进入这个文件夹,查看当前目录(pwd命令)。
在此目录中(当前目录)【/Users/michael/learngit】
- $ git init
- Initialized empty Git repository in /Users/michael/learngit/.git/
执行完命令以后,发现多了一个.git目录,这个就表明当前目录是一个git仓库。
通俗的讲在这个目录里面可以记录(增,删,修)一些文件了。
我们先了解一下工作区,暂存区,版本库。
工作区(Working Directory):就是你电脑里能看到的地方,就是当前操作的目录。
版本库(Repository):就是你git init出来一个隐藏目录.git目录。
暂存区(Stage):就是git add后暂时存放的地方,就是快递公司了。
实例操作(增,删,修)中的【增】:
创建readme.txt&编辑readme.txt文件
- ~/learngit$vi readme.txt
readme.txt文件内容
- Git is a version control system.
- Git is free software.
往git仓库中添加readme.txt文件,不显示任何信息
- ~/learngit$git add readme.txt
commit会生成commit id(100644)这,-m是让你写一下提交说明(我为什么添加这个文件的一些说明,让其他人知道这部分修改是有关什么的)
- ~/learngit$git commit -m "wrote a readme file"
- [master (root-commit) cb926e7] wrote a readme file
- 1 file changed, 2 insertions(+)
- create mode 100644 readme.txt
实例操作(增,删,修)中的【修】:
编辑readme.txt文件
- ~/learngit$vi readme.txt
内容修改为
- Git is a distributed version control system.
- Git is free software.
然后我们查看一下现在git状态
- $ git status
- # On branch master
- # Changes not staged for commit:
- # (use "git add <file>..." to update what will be committed)
- # (use "git checkout -- <file>..." to discard changes in working directory)
- #
- # modified: readme.txt
- #
- no changes added to commit (use "git add" and/or "git commit -a")
看注释就明白了
1. git add <file>..." to update what will be committed
2。git checkout -- <file>..." to discard changes in working directory,就是撤销,还未放到Stage中的(还没有git add)修改。
Tips:如果放到暂存区了,想撤销了(git reset HEAD <file> 再执行 git checkout -- <file>)
我们先看看跟修改之前的内容有什么不同。执行一下命令
- ~/learngit$ git diff readme.txt
- diff --git a/readme.txt b/readme.txt
- index 46d49bf..9247db6 100644
- --- a/readme.txt
- +++ b/readme.txt
- @@ -1,2 +1,2 @@
- -Git is a version control system.
- +Git is a distributed version control system.
- Git is free software.
-是修改之前,+是当前修改后的。
不同点就是文件第一行(+1,2【文件第1行修改,文件总行数2行】),
- -Git is a version control system.
- +Git is a distributed version control system.
好了,确认完了就加到git仓库中保存吧。
- ~/learngit$ git add readme.txt
- ~/learngit$ git status
- # On branch master
- # Changes to be committed:
- # (use "git reset HEAD <file>..." to unstage)
- #
- # modified: readme.txt
- #
好了,加也加进来了,提交并说明一下修改吧
- ~/learngit$ git commit -m "add distributed"
- [master ea34578] add distributed
- 1 file changed, 1 insertion(+), 1 deletion(-)
好了,看看有没有提交正确,看看当前状态
- ~/learngit$ git status
- # On branch master
- nothing to commit (working directory clean)
实例操作(增,删,修)中的【删】:
直接删除文件
- ~/learngit$ rm readme.txt
然后看看现在状态
- ~/learngit$ git status
- # On branch master
- # Changes not staged for commit:
- # (use "git add/rm <file>..." to update what will be committed)
- # (use "git checkout -- <file>..." to discard changes in working directory)
- #
- # deleted: test.txt
- #
- no changes added to commit (use "git add" and/or "git commit -a")
git不乐意了,暂存区和工作区不一样。于是乎git给了我两个选择
1. git
rm 从版本库中删除该文件
2. git checkout -- readme.txt 撤销你的操作。
从如果选择2了那就git commit -m “remove readme.txt”
回退到历史节点(本人命名为穿越-_-,[其实是真正的博主命名的]):
比如说现在有这些commit节点
- ~/learngit$ git log
- commit 3628164fb26d48395383f8f31179f24e0882e1e0
- Author: Michael Liao <askxuefeng@gmail.com>
- Date: Tue Aug 20 15:11:49 2013 +0800
- append GPL
- commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
- Author: Michael Liao <askxuefeng@gmail.com>
- Date: Tue Aug 20 14:53:12 2013 +0800
- add distributed
- commit cb926e7ea50ad11b8f9e909c05226233bf755030
- Author: Michael Liao <askxuefeng@gmail.com>
- Date: Mon Aug 19 17:51:55 2013 +0800
- wrote a readme file
另一种查看git log 格式
- ~/learngit$ git log --pretty=oneline
- 3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
- ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
- cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
当前版本“append GPL”回退到上一个版本“add distributed”
HEAD^是前一个有两个那就是倒数第二个,如果有10个-_-,
那就用别的方法:HEAD~10
- ~/learngit$ git reset --hard HEAD^
- HEAD is now at ea34578 add distributed
看看git log
- ~/learngit$ git log
- commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
- Author: Michael Liao <askxuefeng@gmail.com>
- Date: Tue Aug 20 14:53:12 2013 +0800
- add distributed
- commit cb926e7ea50ad11b8f9e909c05226233bf755030
- Author: Michael Liao <askxuefeng@gmail.com>
- Date: Mon Aug 19 17:51:55 2013 +0800
- wrote a readme file
OMG 发现append GPL的commit不见了,当然-_-,因为你穿越时空来到过去,怎么可能看到未来,nonono
但是我的记忆是还是有的,那么我们看看一下记录
- ~/learngit$ git reflog
- ea34578 HEAD@{0}: reset: moving to HEAD^
- 3628164 HEAD@{1}: commit: append GPL
- ea34578 HEAD@{2}: commit: add distributed
- cb926e7 HEAD@{3}: commit (initial): wrote a readme file
呀~~~发现新大陆(3628164),看来可以回去了。下次必须得记录一下未来的commit在穿越(推荐)
- ~/learngit$ git reset --hard 3628164
- HEAD is now at 3628164 append GPL
push以后的commit一般回退会用 git revert。
git revert是用一次新的commit来回滚之前的commit,
git reset是直接删除指定的commit
eclipse与github界面很酷哦:
有关GIT的更多相关文章
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git与Repo入门
版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...
- 史上最详细git教程
题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...
- [版本控制之道] Git 常用的命令总结(欢迎收藏备用)
坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...
- 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解
工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...
- git 命令
切换仓库地址: git remote set-url origin xxx.git切换分支:git checkout name撤销修改:git checkout -- file删除文件:git rm ...
- git亲测命令
一.Git新建本地分支与远程分支关联问题 git checkout -b branch_name origin/branch_name 或者 git branch --set-upstream bra ...
随机推荐
- 如何在使用 RemoteWebDriver 打开网页的同时获取 Http 状态码
最近一直在用Selenium这个开源项目写一些web 自动化的小玩意.本来一直运行的挺好,直到有一天突然发现资源抓取失败了,翻看日志才发现,原来本该正常打开的页面返回了504错误所以自然失败了.如何避 ...
- ODCA最佳实践翻译:Architecting Cloud-Aware Applications (一)
Architecting Cloud-Aware Applications ** ODCA(Open Data Center Alliance)最佳实践 ** MagicBowen(e.bowen.w ...
- USACO Section 3.3 骑马修栅栏 Riding the Fences
题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个 ...
- Cnetos7下,已经能访问tomcat
进入/usr/local/apache-tomcat-8.0.24/bin 中 执行:./startup.sh开启tomcat 再执行如下 systemctl stop firewalld.servi ...
- bzoj1433: [ZJOI2009]假期的宿舍
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2286 Solved: 969[Submit][Stat ...
- random类的使用
小栗子a如下: string[] punch = new[] { "石头", "剪刀", "布" }; string myPunch; pu ...
- 《Linux企业应用案例精解》一书配套视频发布
<Linux企业应用案例精解>一书配套视频发布(每周更新视频教程),通过读者平台账号,可以在平台下载AVI格式.所有读者都能获得本书中涉及的软件资料,轻松搭建你的学习环境. 当当购书地址: ...
- poj2000
为了凑今天的数,大水题.不解释了,说来惭愧. #include <stdio.h> int main(){ int n; int i,cnt,j; int tot; while(~scan ...
- C++ 必知必会: 条款1: 数据抽象
数据抽象, 具有C语言经理的我, 原先是将其看做是一个数据的集合, 把自己常用的数据通过某种方式总结,集合起来, 使用的时候能够更加方便------其实这个还是结构体思想的延续,结构体内部包含了若干的 ...
- view上添加点手势 button无法响应点击事件
在view 上添加手势 有的时候 会把Button的 点击事件盖掉,这个 时候 我们用UITapGestureRecognizer的代理方法 //手势的代理方法 - (BOOL)gestureRec ...