git学习笔记

参考链接

廖雪峰Git教程
Git常见问题

配置全局用户

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

【注意】git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

创建本地版本库

版本库又名仓库,可以理解成是一个目录,这个目录中的所有文件都被git管理起来。

  1. 创建空目录
λ mkdir dxf_test_git
λ cd dxf_test_git
λ pwd

>> C:\Users\IdeaProjects\dxf_test_git
  1. 将目录变成Git可以管理的仓库
λ git init

>> Initialized empty Git repository in C:\Users\IdeaProjects\dxf_test_git/.git/
  1. 将改动的文件添加到仓库
    在dxf_test_git目录下新建一个test.txt文件,并添加两行内容,然后将改动添加至仓库。
# git add testfile 添加改动的文件,git add . 添加所有改动的文件 
# git commit -m “……” 提交改动信息,引号中为改动提示,便于查找 
λ git add test.txt 
λ git commit -m "wrote a readme file"

>>  1 file changed, 2 insertions(+)
    create mode 100644 test.txt
# 表示一个文件被改动,添加了两行内容。
  1. 查看仓库改动状态
λ 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:   test.txt

    no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,test.txt被修改过了,但还没有准备提交的修改。用git diff这个命令看看,可以看到具体修改了什么内容。

λ git diff

>>  diff --git a/test.txt b/test.txt
    index d8036c1..d55a7b6 100644
    --- a/test.txt
    +++ b/test.txt
    @@ -1,2 +1,4 @@
    Git is a version control system.
    +Git is free software.
    +Git is a distributed version control system.
    Git is free software.
    \ No newline at end of file
  1. 查看提交记录
λ git log

>>  commit 9857b0eb859740cb7846a5b9f8bb4ef2fd849b76 (HEAD -> master)
    Author: MyName <MyName@qq.com>
    Date:   Mon Aug 19 16:42:38 2019 +0800

        This is a test file

    commit 05e0a6a03c1c29ccdbf5393483a5e21a65a359d8
    Author: MyName <MyName@qq.com>
    Date:   Mon Aug 19 14:54:41 2019 +0800

        write a test file

git log命令显示从最近到最远的提交日志,如果嫌信息太多,可以试试加上--pretty=oneline参数:

λ git log --pretty=oneline

>>  9857b0eb859740cb7846a5b9f8bb4ef2fd849b76 (HEAD -> master) This is a test file
    05e0a6a03c1c29ccdbf5393483a5e21a65a359d8 write a test file

"9857b0……"是Git的commit id,用十六进制表示。

  1. 版本回退
    在Git中,用HEAD表示当前版本,也就是最新的提交"9857b0……"(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD^,HEAD~100表示前第100个版本。
λ git reset --hard HEAD^

>>  More?
    More?
    fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.Use '--' to separate paths from revisions, like this:'git <command> [<revision>...] -- [<file>...]'
# 回退失败:由于windows中^是特殊字符,因此要加引号 

λ git reset --hard HEAD‘^’

>>  HEAD is now at 05e0a6a write a test file

当你回退到了某个版本,又后悔了,想恢复到新版本却找不到新版本的commit id时,可以用git reflog查看每一次命令。

λ git reflog

>>  05e0a6a (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
    9857b0e HEAD@{1}: commit: This is a test file
    05e0a6a (HEAD -> master) HEAD@{2}: commit (initial): write a test file

由此可知,新版本的id是9857b0e,可以用λ git reset --hard 9857b0e命令返回新的版本。

  1. 撤销修改
    情况一:修改了文件,但是还没有add,可以用git checkout -- file命令清除工作区的修改。注意,--很重要,没有--,就变成了“切换到另一个分支”的命令。
λ 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:   test.txt

    no changes added to commit (use "git add" and/or "git commit -a")

λ git checkout -- test.txt

λ git status

>>  On branch master
    nothing to commit, working tree clean

情况二:修改了文件,并且已经add,但是还没有commit。可以用git reset HEAD file命令把暂存区的修改撤销掉(unstage),重新放回工作区,再用git checkout -- file命令清除工作区。

λ git reset HEAD test.txt

>>  Unstaged changes after reset:
    M       test.txt

λ git checkout -- test.txt
  1. 删除文件
    情况一:误删
λ git checkout -- delete.txt

情况二:确实要删掉

λ git rm delete.txt
λ git commit -m "remove the delete.txt"

远程仓库

  1. 关联远程仓库
λ git remote add origin ssh://git@xxxxxxxx/LearnGit.git

远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

  1. 推送本地仓库内容
λ git push -u origin master

第一次推送master分支时,加上了-u参数,Git不但会把本地的分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

  1. 克隆远程库内容至本地
λ git clone ssh://git@xxxxxxxx/LearnGit.git
  1. 创建分支
λ git checkout -b dev

-b表示创建并切换分支,相当于以下两条命令:

λ git branch dev
λ git checkout dev

用git branch命令查看当前分支。git branch命令会列出所有分支,当前分支前面会标一个*号。

λ git branch
    * dev
    master

然后,我们就可以在dev分支上正常提交,比如对test.txt做个修改。此时,如果再将分支切换回master,会发现test.txt中没有新添加的内容。

  1. 合并指定分支到当前
λ git merge dev

>>  Updating 1dbbb68..65677ed
    Fast-forward
    test.txt | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)
  1. 删除分支
 $ git branch -d dev
  1. 储藏分支
    在dev分区下工作,工作只进行到一半,还没法提交,但必须马上解决一个bug,可以利用stash功能把当前工作现场“储藏”起来,等以后恢复现场后继续工作,另外创建issue分支来修复bug。
# on branch dev
λ git stash
# 返回master分支,在master分支上创建新的issue分支用来解决bug,合并master分支,并删除issue分支
# 回到dev分支
λ git stash list
λ git stash apply
λ git stash drop
λ git stash pop

可以多次stash,恢复的时候,先用git stash list查看,然后用命令git stash apply stash@{0}恢复指定的stash。
同样的bug,要在dev上修复,我们只需要把fix bug 101这个提交所做的修改“复制”到dev分支。注意:我们只复制fix bug 101这个提交所做的修改,并不是把整个master分支merge过来。Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支。

λ git branch
    * dev
    maste
    
# 4c805e2是fix bug 101这个提交的id
λ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)
  1. 查看远程库信息
λ git remote -v
  1. 建立本地分支和远程分支的关联
λ git branch --set-upstream branch-name origin/branch-name
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容

  • Git教程 一、Git简介 1.1. Git的诞生1.2.集中式的vs分布式 二、安装Git 三、创建版本库 四、...
    曹渊说创业阅读 942评论 0 2
  • 一、常用终端指令 $ pwd用于查看当前目录 $ mkdir learngit 创建一个名为learngit的空目...
    天山雪莲_38324阅读 452评论 0 1
  • 0. 前言 git在团队协作中有重要作用,是有必要进行系统学习的一门工具。本篇是笔者学习git操作的备忘笔记,主要...
    dounine阅读 983评论 0 2
  • git学习笔记 声明 本文是本人学习Git过程中所做的笔记,以便日后查阅,文中多有错漏之处,不建议用作学习材料,文...
    sayonara_yoyo阅读 679评论 0 1
  • Git简介 分布式版本控制系统 Git安装 Linux 上安装 Windows 上安装 模拟环境和Git打包好的程...
    WalkingAlive阅读 601评论 0 0