原文传送门:https://mofanpy.com/tutorials/others/git/checkout/
国内镜像源下载地址
https://npm.taobao.org/mirrors/git-for-windows/
git官网下载
https://git-scm.com/downloads
推荐使用默认安装参数, 然后一路下一步
到底. 安装好之后, 在你的所有程序中, 将会出现 git 的文件夹, 而且里面会有一个程序叫做 git bash
. 这个 git bash
是 git 在 Windows 上为了方便使用所设置的一个 Unix 的环境. 如果你是 Windows 用户, 之后的教程你也能用这个来学习使用 git.
首先确定对哪个文件夹里的文件进行管理,比如我选的D:/xx研究生文件集合/code 文件;然后打开git bush,把目录调至文件夹code
,相关代码
$ cd D:/xx研究生文件集合/code 文件
为了更好使用git,同时记录每一个施加修改的人,故在git中添加用户名user.name
和用户emailuser.email
$ git config --global user.name "B Q"
$ git config --global user.email "[email protected]"
在文件夹中初始化 git 的管理文件库
$ git init
# Initialized empty Git repository in D:/xx研究生文件集合/code/.git/
执行 $ ls
就能看到文件夹中的所有文件,git 创建的管理库文件 .git
是被隐藏起来的需执行$ ls -a
$ ls -a
# . .. .git
法一:直接在管理库文件夹下右击创建文件
法二:用代码touch
,如下:
$ touch 1.py
status
)$ git status
# 1.py # 1.py 文件没有被加入版本库 (unstaged)
add
版本库中,即(untracked–staged)$ git add 1.py
若想一次性添加文件夹中所有未被添加的文件, 可以使用这个:
$ git add .
commit
)即(staged–unmodified)添加好了 1.py
文件, 最后一步就是提交这次的改变, 并在 -m
自定义这次版本名:
$ git commit -m "create 1"
log&diff
)git log
输入git log
就可以看到上次更改的信息(修改的时间及修改的管理员)
$ git add 1.py
$ git commit -m "change 1"
$ git log
git status
)如果我们对1.py
文件进行一次修改, 添加这行代码:
a = 1
然后我们就能在 status
中看到修改还没被提交的信息了.
$ git status
# 输出
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: 1.py # 这里显示有一个修改还没被提交
no changes added to commit (use "git add" and/or "git commit -a")
git diff
)三种情况的的diff形式
# 对比三种不同 diff 形式
$ git diff # unstaged
@@ -1,2 +1,3 @@
a = 2 # 注: 前面没有 +
b = 1 # 注: 前面没有 +
+c = b # 还没 add 去 stage (unstaged)
-----------------------
$ git add . # add 全部修改文件
$ git diff --cached # staged
@@ -1 +1,2 @@
-a = 1 # 已 staged
+a = 2 # 已 staged
+b = 1 # 已 staged
-----------------------
$ git diff HEAD # staged & unstaged
@@ -1 +1,3 @@
-a = 1 # 已 staged
+a = 2 # 已 staged
+b = 1 # 已 staged
+c = b # 还没 add 去 stage (unstaged)
例子:已经提交了 commit
却发现在这个 commit
中忘了附上另一个文件
操作:添加一个文件, 将这个修改也 commit
进 上一个版本
$ git add 2.py
$ git commit --amend --no-edit # "--no-edit": 不编辑, 直接合并到上一个 commit
$ git log --oneline # "--oneline": 每个 commit 内容显示在一行
例子:添加 add
了修改, 但是又后悔, 并想补充一些内容再 add
.
操作:想要回到add之前。 比如在 1.py
文件中添加这一行:
d = 3
然后 add
去 staged
再返回到 add
之前:
$ git add 1.py
$ git status -s # "-s": status 的缩写模式
# 输出
M 1.py # staged
-----------------------
$ git reset 1.py
$ git status -s
# 输出
M 1.py # unstaged
每个 commit
都有自己的 id
数字号, HEAD
是一个指针, 指引当前的状态是在哪个 commit
. 最近的一次 commit
在最右边, 我们如果要回到过去, 就是让 HEAD
回到过去并 reset
此时的 HEAD
到过去的位置.
# 看看所有的log
$ git log --oneline
# 输出
904e1ba change 2
c6762a1 change 1
13be9a7 create 1.py
-----------------------
# 回到 c6762a1 change 1
# 方式1: "HEAD^"
$ git reset --hard HEAD^
# 方式2: "commit id"
$ git reset --hard c6762a1
-----------------------
# 看看现在的 log
$ git log --oneline
# 输出
c6762a1 change 1
13be9a7 create 1.py
目标:挽救消失的change 2
操作:查看 $ git reflog
里面最近做的所有 HEAD
的改动, 并选择想要挽救的 commit id
,重复 reset
步骤就能回到 commit (amend): change 2
(id=904e1ba)这一步了::
$ git reflog
# 输出
c6762a1 HEAD@{0}: reset: moving to c6762a1
904e1ba HEAD@{1}: commit (amend): change 2
0107760 HEAD@{2}: commit: change 2
c6762a1 HEAD@{3}: commit: change 1
13be9a7 HEAD@{4}: commit (initial): create 1.py
$ git reset --hard 904e1ba
$ git log --oneline
目标:
我们要对 1.py
进行回到过去操作, 回到 c6762a1 change 1
这一个 commit
操作:
使用 checkout
+ id c6762a1
+ --
+ 文件目录 1.py
, 我们就能将 1.py
的指针 HEAD
放在这个时刻 c6762a1
:
$ git log --oneline
# 输出
904e1ba change 2
c6762a1 change 1
13be9a7 create 1.py
---------------------
$ git checkout c6762a1 -- 1.py
然后重新add commit
$ git add 1.py
$ git commit -m "back to change 1 and add comment for 1.py"
$ git log --oneline
# 输出
47f167e back to change 1 and add comment for 1.py
904e1ba change 2
c6762a1 change 1
13be9a7 create 1.py
可以看出, 不像 reset
时那样, 我们的 change 2
并没有消失, 但是 1.py
却已经回去了过去, 并改写了未来.
在 github/gitee注册一个 账户, 这个不用我多说, 大家都知道注册.
然后添加你的一个 online 版本库 repository:
使用这节内容的初始例子文件, 然后将本地的版本库推送到网上:
# 关联git仓库
$ git remote add origin https://github.com/MorvanZhou/git-demo.git
# 将你的仓库和你的github库合并了
$ git pull --rebase origin master
# 将本地仓库推送到远程仓库
$ git push origin master
如果在本地再进行修改, 比如在 1.py
文件中加上 # happy github
, 然后 commit
并推上去:
$ cd D:/xx研究生文件集合/code 文件
$ git remote add origin https://github.com/MorvanZhou/git-demo.git
$ git add .
$ git commit -am "诊断代码"
$ git pull --rebase origin master
$ git push -u origin master