Git Git

所谓Git,就是分布式版本控制系统,用于高效的处理任何或大或小的项目。这是它和其他非分布式的版本控制系统,例如SVN、CVS等,最核心的区别。SVN的缺点很明显:假如中心代码挂掉,很难恢复;每次提交都要有网络。而Git的本地库和远程库完全一样,任何一个点出问题,都可以完全恢复代码。本人也是这两天才开始学习Git,由于命令比较多,所以总结一下,方便后面查看。

1.安装后设置名字和邮箱

由于Git是分布式版本控制系统,所以每台机器都必须要设置名字和Email地址。

$ git config --global user.name "Your name"
$ git config --global user.email "Email@example.com"

2.常用的基本命令

因为Git Bash是模拟Linux环境,所以很多都和Linux命令一样。

  • pwd (process work directory) 查看当前目录
  • ls (list) 当前目录文件
  • ls -a (all) 全部文件(包括以.开头的隐藏文件)
  • ls ./ 当前目录
  • ls ../ 上一层目录
  • ls -l (long) 给出更长的信息
  • cd (change directory) 切换目录
  • cd ../(/可以省略)
  • cd ~ 切换到根目录
  • mkdir (make directory) 创建目录
    mkdir -p(path) a/b/c 在a里面创建b,b里面创建c
  • touch a.html 创建文件
  • rm (remove) 删除文件
  • rm -r (recursively) 删除目录
  • mv (move) A B 把A重命名为B
  • cp (copy) -r a b 将文档a复制到目录b下,文件名仍为a
  • echo 1 把数字1打印出来
    echo 1 > test.txt ">"表示把前面命令的结果写入后面的文件中
  • cat test.txt 查看文件
    cat test2.txt | less(|为管道)把文档一页一页显示,J往上看,K往下看。适用于文档比较长的情况(q 退出)
  • head test2.txt 显示前几行
    head -n 3 test2.txt 显示前三行
    tail -n 3 test2.txt 显示尾三行
  • du -sh 显示目录大小
  • ls --help(两个以上字母,两个-) 帮助文档
    ls -h (一个字母,一个-)

3.小技巧

  • alt + . (alt按着不放,再按.,可以把上次命令的参数写出来)
  • !! (重复上次命令)
  • . (当前目录)
  • .. (上层目录)
  • ~ (user下面以你名字命名的目录)
  • mkdir "a b" (参数中有空格,需要用引号;没有空格,可以不加)

4.生成SSH key

我们在使用Github的时候,默认的是使用HHTP通信协议取得Git远程库。但HTTP每次执行远程仓库一般都会要求输入用户名和密码,比较麻烦。所以我们可以使用SSH协议,通过预先生成的密钥来验证身份。
关于如何生成SSH key可以参考官方文档:
generating SSH keys
这里需要注意的是我们在生成SSH keys的时候,默认的是使用HHTP通信协议取得Git远程库。如果一开始没有注意这个问题,我们的地址就会绑定错误,这时候如果直接增加origin标签,输入:

$ git remote add origin git@github.com:jirengu/git-test3.git

会出现fatal错误,提示origin已经存在。所以我们需要先删除origin标签(第二行代码):

$ git remote -v
$ git remote remove origin

然后再重新增加origin标签就可以了(第一行代码是查看远程端信息)。

5.单人操作

在介绍操作之前,首先介绍一下git的四个区:

  • 工作文件夹(不加入缓冲区git不管)
  • 暂存区 Stage (纳入git管理记录,)
  • 本地仓库 Local (纳入版本控制,是本地的库,其他人不生效)
  • 远程仓库 Remote(在远程服务器,可使用ssh/git/https协议)

一般建议在c盘新建一个文件夹:

$ cd /c
$ mkdir git-test3
$ cd git-test3

接下来把当前文件夹初始化为一个git库:

$ git init 

把当前文件夹所有的文件放入暂存区:

$ git add .

提交到库,以下三行代码,输入任何一行都可以,作用有些差别。第一句会默认打开vim编辑器,可以输入更多的信息;第二句不会打开编辑器,适用于简单的加入一句话;第三句,可以把所有的修改都提交,包括删除的文件。
(ps:vim编辑器的退出方法一般分为保存和不保存,操作分别为:“Esc”、“:”、“wq”、回车;“Esc”、“:”、“q!”、回车。)

$ git commit
$ git commit -m "add"
$ git commit -am "add"

然后放入远程库,给远程库取名为origin,下次推送可以直接推送到origin地址(git push):

$ git remote add origin git@github.com:jirengu/git-test3.git

6.多人操作

如果是多人合作一个项目,第一步,需要把远程库的代码拉到本地,使用命令:

$ git clone git@github.com:jirengu/git-test3.git

接下来要进行的操作

  • git pull
  • 解决冲突(如果出现冲突的话)
  • git push

7.代码提交不顺利情况

在git push后出现错误,可能是因为其他人提交了代码,而使你的本地代码库版本不是最新的。 这时你需要先git pull代码,再检查是否有文件冲突。 没有文件冲突的话需要重新走一遍代码提交流程add —> commit —> push。

8.解决冲突

冲突一般发生在git pull的时候,当结果出现UU,就说明产生了冲突。比如说结果出现:UU readme.txt,说明产生了冲突需要解决它。

$ vi readme.txt

搜索文件里面的“====”,在文档上部找到“<<<<”(<<<<和====之间的部分为本地冲突,====和>>>>之间的部分为远程冲突), 修改里面的内容,解决方案为:用上面的或者下面的或者将两者合并,再把“<<<<”“====”“>>>>”删掉。最后输入命令:

$ git status -sb
$ git add .
$ git status
$ git commit -m "merge"
$ git push

就可以成功的推送了。这其中需要注意的是,解决冲突之后,要添加文件(add)。

9.变更项目地址

假设已经有库,先处于另一个项目test-demo,现在要把当前文件代码推送到另一个项目上,这时候我们可以再新建一个标签(比如取名为git-test),让它代表新项目的地址,通过SSH连接到库上:

$ git remote add git-test git@github.com:3.git
$ git remote -v 
$ git push git-test master

(ps:如果要进行强制推送,命令为:git push -f git-test master,表示把本地库强制推送到名叫git-test的远程库的master分支上)

10.分支

创建分支可以避免提交代码后对主分支的影响,可以不让自己的记录打扰到合作者。同时也使你有了相对独立的开发环境,分支具有很重要的意义。

  • 新建本地分支:

    • 创建分支:git branch feature
  • 查看分支:git branch -a(*表示当前分支)

  • 切换分支:git checkout feature

  • 把本地的分支feature更新到远程分支feature:git push origin feature:feature

  • 合并分支:

  • git checkout master

  • git merge feature

  • git branch -d feature (删除分支,先合并再删除)

合并分支的操作是从feature合并到master分支,当前在master分支上。

  • 删除远程分支feature
    git push origin :feature

11.版本退回

版本回退用于线上系统出现问题后恢复旧版本的操作。
git reset HEAD(分支号的前面六位就可以)
git status -sb
上面代码的结果是工作目录没有更改,文件仍然存在,只改git认为的最新状态。如果要进行硬盘改写,则可以输入:
git reset --hard HEAD
查看所有的提交:
git reflog

由于自己第一次用git,感觉东西比较多,所以把学到的东西总结了一下。后面接触的多了,知道的多了再来慢慢补充。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,666评论 4 54
  • 和老爸打了电话,聊到了独身主义,老爸说那个谁谁谁一直说自己独身,最后还不是结了婚。我没有反驳,也许是我太残忍,毫无...
    吃掉半颗柚子阅读 506评论 0 0
  • 别人比我聪明,比我认学,比我有意志,还比我漂亮,日子没法过了。
    天上一只叔阅读 148评论 0 0
  • 无缘又如何 沮丧是无力的 拒绝又怎样 可以再更新一次 我不懂你的步伐 你也不必懂我 你的一切用以传世 我只描摹惨淡人生
    非矣阅读 136评论 0 0