git使用教程

参考资料:Git教程

  1. 创建一个空目录
#添加文件夹
$ mkdir learngit
↓
#索引到该文件夹
$ cd learngit
↓
#查看添加结果
$ pwd
--->/c/Users/Xiaoji/learngit

  1. 通过git init命令把这个目录变成Git可以管理的仓库
$ git init
--->Initialized empty Git repository in C:/Users/Xiaoji/learngit/.git/

  1. 把文件添加到仓库
#编写一个readme.txt文件,内容如下:
Git is a version control system.
Git is free software.
#!一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件
↓
#用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt
↓
# 用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m 'wrote a readme.txt'  #-m后面输入的是本次提交的说明,可以输入任意内容
--->
[master (root-commit) 37424cf] wrote a readme.txt
 1 file changed, 2 insertions(+)  #1 file changed:1个文件被改动,2 insertions:插入了两行内容
 create mode 100644 readme.txt
tips:
#可以多次add不同的文件,commit可以一次提交很多文件
$ git add <file>:$ git add file2.txt file3.txt

$ git commit -m "add 2 files."

  1. 修改文件内容并提交:
# 继续修改readme.txt文件,改成如下内容:
Git is a distributed version control system.
Git is free software.

#运行git status命令看看结果:
$ 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")  #readme.txt被修改过了,但还没有准备提交的修改

# 用git diff这个命令看看具体修改了什么内容
$ git diff
--->
diff --git a/readme.txt b/readme.txt
index d8036c1..013b5bc 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.  #添加了一个distributed单词
 Git is free software.
\ No newline at end of file

# 提交修改后的文件
$ git add readme.txt
$ git commit -m "add distributed"

# 再次查看结果:
$ git status
--->
On branch master
nothing to commit, working tree clean  #Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的
tips:
git diff    #是工作区(work dict)和暂存区(stage)的比较
git diff --cached    #是暂存区(stage)和分支(master)的比较
git diff HEAD -- file    #比较的是工作区中的文件与版本库中文件的差异

  1. 查看修改的历史记录
$ git log
--->
commit 10e3ff13cb1552ae791c84392b8e6eaed78e55f5 (HEAD -> master)
Author: Xiaoji <Xiaoji@Xiaoji>
Date:   Thu Aug 16 18:24:59 2018 +0800

    append GPL

commit 98f655214d25482fe581f6bfa5d73b83dfa849f4
Author: Xiaoji <Xiaoji@Xiaoji>
Date:   Thu Aug 16 18:15:12 2018 +0800

    add distributed

commit 37424cf2fb099229724cd19dfd68f63d4d73167d
Author: Xiaoji <Xiaoji@Xiaoji>
Date:   Thu Aug 16 17:58:38 2018 +0800

    wrote a readme.txt
-----------------------------------------------------------------------------------------------------
#简单版历史记录
$ git log --pretty=oneline
--->
10e3ff13cb1552ae791c84392b8e6eaed78e55f5 (HEAD -> master) append GPL
98f655214d25482fe581f6bfa5d73b83dfa849f4 add distributed
37424cf2fb099229724cd19dfd68f63d4d73167d wrote a readme.txt

  1. 退回到上一个版本
#HEAD表示当前版本,HEAD^上一个版本,HEAD^^上上一个版本
#HEAD~100往上100个版本
$ git reset --hard HEAD^  
--->
HEAD is now at 98f6552 add distributed

  1. 反悔了上面的退回操作,需要重新找回退回前的版本
# 1、有之前要退回到commit id:
$ git reset --hard 10e3ff
--->
HEAD is now at 10e3ff1 append GPL

# 2、暂时没有之前的commit id:
$ git reflog
--->
10e3ff1 (HEAD -> master) HEAD@{0}: reset: moving to 10e3ff
98f6552 HEAD@{1}: reset: moving to HEAD^
10e3ff1 (HEAD -> master) HEAD@{2}: commit: append GPL
98f6552 HEAD@{3}: commit: add distributed
37424cf HEAD@{4}: commit (initial): wrote a readme.txt
↓
↓
↓
$ git reset --hard 10e3ff
--->
HEAD is now at 10e3ff1 append GPL

  1. 撤回修改
    a. 文件修改后反悔了,但这时文件还没有git add,需要撤回
$ git checkout -- readme.txt  #把readme.txt文件在工作区的修改全部撤销,结果是回到和版本库一模一样的状态;

b. 修改的文件已经git add,但还没有git commit,需要撤回

# 1、先从暂存区撤回修改
$ git reset HEAD readme.txt
--->
Unstaged changes after reset:
M       readme.txt
↓
↓
↓
# 1.5、查看状态
$ git status
--->
On branch master
Changes not staged for commit:      #注意not staged
  (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")
↓
↓
↓
# 2、撤回修改到最新的commit状态
$ git checkout -- readme.txt

  1. 删除文件,撤回删除
    a. 版本库的文件已从系统中删除,需要在git中确认
# 将删除修改提交到暂存区
$ git rm test.txt
--->
rm 'test.txt'
↓
↓
↓
# 向git提交确认删除
$ git commit -m 'remove test.txt'
--->
[master c262779] remove test.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 test.txt

b. 版本库的文件删除错误,还没有git rm,撤回:

$ git checkout -- test.txt

c. 版本库的文件删除错误,已经git add``````git commit,撤回:

$ git reset --hard 62adb  #62adb为版本号(修改记录号)

  1. 与github建立连接,将本地仓库推送到github
# 在github创建一个远程仓库后,将本地仓库与之相连接
$ git remote add origin https://github.com/junzhu-github/learngit.git
↓
↓
↓
# 把本地库的所有内容推送到远程库上
$ git push -u origin master  #第一次推送时,要加上了-u参数
--->
Enumerating objects: 19, done.
Counting objects: 100% (19/19), done.
Delta compression using up to 2 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (19/19), 1.45 KiB | 105.00 KiB/s, done.
Total 19 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To https://github.com/junzhu-github/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

# 此后,每次本地提交后,推送最新修改使用:
$ git push origin master

# 查看远程库的信息
$ git remote
--->
origin

# or 需要更详细信息
$ git remote -v
--->
origin  git@github.com:junzhu-github/gitskills (fetch)
origin  git@github.com:junzhu-github/gitskills (push)


  1. 从远程库克隆
# 在github新建仓库gitskills后,克隆到本地
$ git clone git@github.com:junzhu-github/gitskills
--->
Cloning into 'gitskills'...
The authenticity of host 'github.com (198.19.0.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,198.19.0.112' (RSA) to the list of known hosts.
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

  1. git分支的创建、使用、删除
# 创建并切换到分支
$ git checkout -b dev
--->
Switched to a new branch 'dev'

#equal to
$ git branch dev
$ git checkout dev
--->
Switched to branch 'dev'
↓
↓
↓
# 查看当前分支
$ git branch
--->
* dev
  master
↓
↓
↓
# 提交文件修改  # !改变的只是分支上的文件内容,master的文件未改变
$ git add README.md

$ git status
--->
On branch dev
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.md
↓
↓
↓
# 把dev分支的工作成果合并到master分支上,master文件内容改变
$ git merge dev
--->
Updating 482d191..1a83f8d
Fast-forward
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
↓
↓
↓
# 合并完成后,就可以放心地删除dev分支了
$ git branch -d dev
--->
Deleted branch dev (was 1a83f8d).
↓
↓
↓
# 删除后,查看branch,就只剩下master分支了
$ git branch
--->
* master
↓
↓
↓
# 切换回master分支
$ git checkout master
--->
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

  1. 忽略特殊文件
    a. 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件
    b. 把.gitignore也提交到Git
    tips: 使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。

  1. 配置别名
# 增加别名
$ git config --global alias.st status  #--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

# 删除别名
git config --global --unset alias.ci
查看配置文件
# 当前仓库的local配置文件
$ cat .git/config 

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