Git是个了不起但却复杂的源代码管理系统。它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作。让我们诚实一记吧:Git是复杂的,我们不要装作它不是。但我仍然会试图教会你用(我的)基本的Git和远程代码库干活的工作步骤,在15分钟内。

工作步骤

我会展示以下的步骤,通常能帮我独自在一台或多台机器上做项目。

  1. 创建一个远程的空代码库(在BitBucket上)

  2. 在本地代码库添加一个项目

  3. 在分支上开发新功能

  4. a) 保留新功能 或者 b) 丢弃它们

  5. 也许,回到某个早先的时间点

  6. 将本地代码库推送到远程代码库

  7. 在另一台机器上取得远程代码库

安装Git    

在大多数*nix系统(Linux、OS X)上,Git已经被安装了。你通过发送下面的命令,可以通过Git自身,把它更新到最新的的开发版本(不推荐)。

git clone https://github.com/git/git

在Windows上,你可以在这里下载Git的安装程序。如果你真的需要其他系统的安装程序,Mac OS X安装文件在这里,Linux的操作指导在这里。

创建一个远程代码库

很多人喜欢用Github。我个人更喜欢BitBucket,因为它提供了不限制的私有代码库,那是我最需要的。你可以将下列指令转换到Github上,这些过程是相同的。

那么,去到www.bitbucket.org并注册一个账号。一旦完成,登录后点击最上方的“create(创建)”按钮。照着填写表格,勾选私有代码库。你可不想让其他人来偷窥你的Facebook的杀手级应用的源代码,对吧。

你现在可以离开BitBucket了,我们在已经有了所有那里需要的东西了。

设置Git

在我们能用Git工作之前,我们需要做个一次性的配置。为了Git能跟踪到谁做了修改,我们需要设置你的用户名。我强烈建议你使用与注册BitBucket账号相同的用户名和电子邮箱地址。发送这些命令,相应地替换掉其中的“your_username”和“your_email@domain.com”(注意引号):

git config --global user.name "your_username"

git config --global user.email your_email@domain.com

我们也会设定推送(push)的默认值为‘simple’。要了解这是什么意思,快速阅读我之前发布的关于推送的默认值(非必须)。发送这条命令:

git config --global push.default simple

我们都设好了。你无需在你的机器上再重复这些配置,但如果你在另一台机器上工作的话,不要忘记这些配置。如果你忘记做初始的配置,Git不会允许你提交任何东西,这会让你困扰。

创建一个本地代码库

作为例子,我们会假装我们有一个网站(无所谓技术)存在于我们机器上的‘workspace’文件夹下的’my_site’文件夹内。在命令行中,去到你的站点的根文件夹。在OS X和Linux上:

cd ~/workspace/my_site/

在Windows上:

cd c:\workspace\my_site

我们首先需要告诉Git这个文件夹是我们需要跟踪的项目。所以我们发送这个命令来初始化一个新的本地Git代码库

git init

Git会在my_site文件夹内创建一个名为.git的隐藏文件夹,那就是你的本地代码库。

加载(Stage)文件

我们现在需要命令Git我们需要加载(stage)所有项目文件。发送:

git add .

最后的“.”符号的意思是“所有文件、文件夹和子文件夹”。假如我们只想要把特定文件添加到源代码控制中去,我们可以指定它们:

git add my_file, my_other_file

提交文件

现在,我们想要提交已加载(staged)的文件。阅读“添加一个时间点,在这里你的文件处在一个可还原的状态”。我们提交我们的文件时,总是附带着有意义的注释,描述了它们现在的状态。我一直用“initial commit”来作为第一个提交的注释。

git commit -m "initial commit"

就这样。现在你随时都可以回滚到这个提交状态。如果你有需要检查你现在的已加载(staged)和未加载(unstaged)文件的状态、提交等,你可以询问git的状态:

git status

创建分支

建立分支是你创建代码的独立版本的动作,独立于你的主干分支。默认地,每次你提交到Git的文件都会被储存到“master(主干)”分支。

现在我们来说说,你想要向项目里添加一个功能,但你想要能够回滚到现在版本,以防出现差错,或者你决定要放弃这个功能。这就是你创建分支的时候了。创建并同时切换到你新建的分支,发送:

git checkout -b new_feature

或者,你可以先创建一个分支然后手动切换,就像这样:

git branch new_featuregit checkout new_feature

要看你现在项目下所有的分支,发送这个:

git branch

现在你可以在你的项目上无所顾忌地做任何你想做的:任何时候,你都可以回到你创建分支前的状态。注意,你同时可以有多个分支,甚至可以从一个分支上再创建一个分支。

合并分支

当你对你的新功能满意了的时候,你想要把它加到主干分支上。当你在你的新功能分支上时,你首先需要加载(stage)并且提交你的文件:

git add .git commit -m "adds my new feature"

然后你移到你的主干分支:

git checkout master

像这样合并:

git merge new_feature

此时,你的主干分支和你的新功能分支会变成一样的了。

丢弃分支

相反,如果你打算丢弃你在分支里做的修改,你首先需要加载(stage)你的文件并且在分支里提交:

git add .git commit -m "feature to be discarded"

然后,你移到主干分支:

git checkout master

现在,你的代码处于你创建分支之前的状态了。

删除一个分支

如果你要把你的分支合并到主干分支,从主干(master)分支上发送:

git branch -d new_feature

假如修改已经合并了,它只会删除分支。假如分支没有合并,你会得到一个错误信息。删除一个未合并的分支(通常你不想保留的修改),你需要发送一样的命令附带一个大写D。意思是“强制删除分支,无论如何我不想要它了。”:

git branch -D new_feature

回滚到之前的提交状态

在某些时候,你可能想要回到之前的代码版本。首先,你需要找到你想回到哪个版本。要看所有的完成了的提交,发送:

git log

这会输出你的提交的历史记录,像这样:

commit ca82a6dff817ec66f44342007202690a93763949Author: your_username your_email@domain.comDate:   Mon Nov 4 12:52:11 2013 -0700    changes the frontpage layout

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7Author: your_username your_email@domain.comDate:   Mon Nov 4 11:40:33 2013 -0700    adds my new feature

commit a11bef06a3f659402fe7563abf99ad00de2209e6Author: your_username your_email@domain.comDate:   Mon Nov 4 10:37:28 2013 -0700    initial commit

如果你想回到“adds my new feature”这个提交,简单地用提交的ID做签出(checkout)(我通常只用到ID开头的9个字符)

git checkout 085bb3bcb

你也可以签出到一个新的分支,像这样:

git checkout -b my_previous_version 085bb3bcb

只是别太疯狂了!你的分支越复杂,就越难确定你真正在做什么。

推送到远程代码库

在第一次你想推送一个本地代码库到远程代码库时,你需要把它添加到你的项目配置里。像这样做:

git remote add origin https://your_username@bitbucket.org/your_username/name_of_remote_repository.git

注意这里的“origin”只是一个习惯。它是你的远程代码库的别名,但是你可以用其他任何你喜欢的词。你甚至可以有多个远程代码库,你只需要给它们起不同的别名。

之后,你想要推送你的本地代码库的主干分支到你的远程代码库:

git push origin master

如果你使用Bitbucket,在这时,你会被请求输入你的密码。照做,你的本地代码库会被推送到你的远程代码库上。

取得远程代码库的一份本地拷贝

如果你还没有一份远程代码库的本地版本(例如,如果你在另一台机器上开始工作,这台机器上还没有用过这个项目),你首先需要拷贝(clone)它。去到你的代码库想要拷贝到的文件夹下,并发送:

git clone https://your_username@bitbucket.org/your_username/name_of_remote_repository.git

另一方面,如果你已经在本地的项目上工作了,只是想从远程代码库上取得它最新的版本,移动到项目的根目录下,并发送:

git pull origin master

别名

Git允许你为你常用的命令创建快捷方式(别名)。例如,如果你不想每次都输入git commit -m “some comment”,而是输入git c “some comment”,你可以向你的git全局配置里添加一个别名来实现,像这样:

git config --global alias.c 'commit -m'

这是我使用的别名列表:

git config --global alias.c 'commit -m'

git config --global alias.co 'checkout'

git config --global alias.cob 'checkout -b'

git config --global alias.br 'branch'

git config --global alias.m 'merge'

git config --global alias.a 'add .'

git config --global alias.s 'status'

git config --global alias.dbr 'branch -d'

 

进一步

当然,还有比这些更多的Git内容。如果你想要更了解Git,我推荐官方文档和教程,你可以在http://git-scm.com/documentation找到。

15 分钟学会使用 Git 和远程代码库的更多相关文章

  1. 15分钟学会使用Git和远程代码库

    git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...

  2. 【git】15分钟学会使用Git和远程代码库

    Git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...

  3. 使用Git和远程代码库

    git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...

  4. 15分钟学会使用Git

    http://blog.csdn.net/u013510614/article/details/50588446 主体思想 Git作为一个复杂的版本控制系统,命令之多,相信很多小白已经望而却步,有的尝 ...

  5. 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)

    前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...

  6. git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚

    [git 删除本地分支] git branch -D br [git 删除远程分支] git push origin :br  (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退 ...

  7. 【GIT】git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚

    [git 删除本地分支] git branch -D br [git 删除远程分支] git push origin :br  (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退 ...

  8. git命令行提交并且同步到远程代码库

    远程代码库以github为例 1.打开 git bash 2.进入项目目录 cd /e/myGitProjects/test 3.提交到本地git仓库 git add -Agit commit -m ...

  9. git远程代码库回滚(webstorm下)

    git远程代码库回滚(webstorm下) 1. 场景 添加了一个文件[file-for-test.js]到git的控制下 进行了三次修改,并分别进行了三次commit,最后进行了一次push git ...

随机推荐

  1. navcat excel数据导入mysql的方法

    navcat excel数据导入mysql的方法 先navcat导出 xls格式 然后把数据复制到往这个xls里 (按照这个xls格式) 然后导入mysql就行了 如果导入的过程无法识别excel里的 ...

  2. python入门之与用户交互

    目录 一.程序与用户交互 1.1 什么是与用户交互 1.2 为什么要与用户交互 1.3 如何与用户交互 1.4 python2和python3中input的区别 1.4.1 python3中的inpu ...

  3. [转帖]超能课堂(207) SD卡标准错综复杂,到底该认哪一个?

    超能课堂(207)SD卡标准错综复杂,到底该认哪一个? https://www.expreview.com/71505.html 开始的地方 SD容量等级 SD标准(SDSC) SDHC SDXC S ...

  4. day26——tyoe元类与object的联系、反射、函数与方法的区别、双下方法

    day26 type元类与object联系 type 获取对象从属于的类 python 中一切皆对象, 类在某种意义上也是一个对象,python中自己定义的类,以及大部分内置类,都是由type元类(构 ...

  5. tkinter中Partial Function Example

    from functools import partial as pto from tkinter import Tk, Button, X from tkinter.messagebox impor ...

  6. Tkint中Label&Button&Scale的使用

    top.geometry()设定窗口的初始大小 scale.set()设定滑块的初始值 scale.get()获取滑块变化的值 控件通过回调函数与其他控件进行通信(Label控件中的文本会受到Scal ...

  7. nodeJs编写的简单服务器

    一.简单的nodeJs写的 http 服务器 1.先Hello world,创建最简单的 Node 服务器(server.js) var http = require("http" ...

  8. Hive 系列(二)—— Linux 环境下 Hive 的安装部署

    一.安装Hive 1.1 下载并解压 下载所需版本的 Hive,这里我下载版本为 cdh5.15.2.下载地址:http://archive.cloudera.com/cdh5/cdh/5/ # 下载 ...

  9. SQL Server 隔离级别(RC&RR)

  10. region、xld有对应的字符串时,将region、xld按照行或列排序的算法实现

    用Halcon解码时,如果一张图里面有多个码,它通常可以把这些码都解出来,并且生成对应的解码结果字符串元组(也就是下面的DecodedDataStrings),如果有多个码,那么该元组就有多个元素. ...