Git 笔记

Git 教程

  • 分布式版本控制系统

本地 Git

安装&配置

  • 配置全局用户名和邮箱
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
  • 创建仓库
$ mkdir learngit
$ cd learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

工作区&暂存区&分支

图1

将文件放入Git仓库(创建和更新)

$ git add readme.txt
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt
  • 其中, commit -m "" 命令说明本次提交的说明。
  • 也可以 add 多个文件后一次 commit
  • add 命令将文件添加到暂存区
  • commit命令将暂存区所有内容提交到当前分支

查看状态

查看仓库状态

$ git status

位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:     readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

查看文件变化部分

  • diff 实际是比较工作区和暂存区文件区别
$ git diff readme.txt

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.
 Git is free software.
\ No newline at end of file

查看修改历史记录

$ git log
commit 0ffb5aef54a52be5ac25da0f7eb0d03af12979aa (HEAD -> master)
Author: cshi <[email protected]>
Date:   Fri Jan 11 12:14:47 2019 +0800

    add GPL

commit 71b1f053c4473948862b8481f22bde39d6f5ce12
Author: cshi <[email protected]>
Date:   Fri Jan 11 12:12:29 2019 +0800

    add distributed

commit 89db0a2f66395fa1079b495df2442a3588a88f6a
Author: cshi <[email protected]>
Date:   Fri Jan 11 11:19:14 2019 +0800

    add a readme file

// 简洁版
$ git log --pretty=oneline

版本回溯

版本表示

  • 当前版本——HEAD
  • 上一个版本——HEAD^
  • 上100个版本——HEAD~100

回溯命令

  • git reset --hard HEAD^
  • 回溯到未来版本——git reset --hard 1094a
    • 其中, 1094a 是之前显示的未来版本的 commit id,只需写前几位即可
    • 如何找到commit id? 可以用 git reflog 来查看每一次命令

撤销更改

未 add 的错误修改

$ git checkout -- readme.txt
  • 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

    • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commitgit add时的状态。

add 了的错误修改

$ git reset HEAD 
  • 将暂存区的修改回退到工作区
  • 然后可以用上面的命令取消工作区的修改

commit 了的错误修改

  • 使用版本回溯
  • 前提是未推送到远程库

删除文件

  • 删除也是修改

确实删除

  1. 手工删除 或者 rm 命令删除
  2. git rm file 删掉
  3. git commit

删错了

用版本库里的版本替换工作区版本

git checkout -- text.txt

  • ⚠️: 你恢复的文件只能是最新版本的

远程仓库

配置SSH

ssh-keygen -t rsa -C "[email protected]"
  • 产生 id_rsaid_rsa.pub 文件在/Users/cshi/.ssh/
  • id_rsa.pub文件内容填到 GitHub 上。本机就可以向 GitHub 推送

Push 代码

  • 关联——在本地仓库下运行命令
git remote add origin https://github.com/cshi11/LeetCode.git
  • 推送
    • 其中,-u 是因为第一次推送,远程库是空的,故将当前 master分支和远程 master 分支关联
git push -u origin master
  • 之后做了修改,本地提交后,可以通过命令将修改推送到 Github
git push origin master

Clone

git clone [email protected]:cshi11/LeetCode.git
  • SSH 比 Https 速度更快,不用每次输入口令

分支

创建、合并分支

  • 创建新分支dev,则创建一个新指针 dev,指向master相同的提交,再把HEAD 指向 dev,表示当前分支在 dev上。

    图2

  • 再提交后,dev 向前走,而 master 不动


    图3

创建并切换分支

git checkout -b dev

等价于

git branch dev
git checkout dev
  • 查看当前分支
git branch

合并分支

git merge dev

删除分支

git branch -d dev

你可能感兴趣的:(Git 笔记)