GIt学习笔记
使用Git进行版本控制
-学习教程:《Python编程 入门到实践》附录D
一.安装Git
1.linux系统安装Git
sudo apt install git-all
2.配置Git
Git跟踪是谁修改了项目,为此需提供你的用户名和电子邮箱地址。
首次提交需要提供这些信息。
git config --global user.name "username"
git config --global user.email "username@example.com"
二.创建项目
创建一个要进行版本控制的项目,将该项目有关全部文件放入一个文件夹内,如将其命名为git_practice,如在该文件夹内创建一个简单的python程序。
创建.py文件
touch hello_git.py
在hello_git.py内编写程序
print("hello git world!")
三.忽略文件
.pyc文件是根据.py文件自动生成的,该文件存储在目录_pycache_中,无需让git跟踪。为了让git忽略这个目录,创建一个名为.gitignore的特殊文件(该文件以句点打头且无扩展名),并在其中添加如下内容。
创建.gitignore文件
touch .gitignore
在.gitignore内编写
_pycache_/
这让git忽略目录_pycache_中的所有文件。使用文件.gitignore可避免项目混乱,影响项目开发。
四.初始化仓库
进入前面创建存储项目文件的文件夹git_practice内,初始化一个Git仓库
git init
Git在git_practice中初始化了一个空仓库。仓库是程序中被Git主动跟踪的一组文件。Git用来管理仓库的文件都存储在隐藏的目录.git
中,其存储了项目的所有历史记录。
五.检查状态
在Git中,分支是项目的一个版本,我们位于分支master上
提交是项目在特定时点的自身各状态记录。
命令git status
可以让我们时刻掌握仓库当前的状态,命令输出告诉我们,文件被修改过了,但还没有准备提交的修改。
git status
若想知道具体修改了哪些内容,可使用git diff
这个命令,显示的格式正是Unix通用的diff格式。
git diff
也可使用git diff HEAD -- 文件名
命令可以查看工作区和版本库里面最新版本的区别:
六.将文件放到Git仓库
将文件放到Git仓库只需两步:
1.用命令git add
告诉Git,把文件添加到仓库:使用命令git add <file>
,注意,可反复多次使用,添加多个文件;。
git add实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
命令git add . 将项目中未被跟踪的所有文件都加入仓库中,使得Git开始跟踪这些文件,并再次检查状态。
git add .
git status
2.用命令git commit
告诉Git,把文件提交到仓库
执行命令git commit -m ''message''
提交记录当前项目状态。
其中message为本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit -m "Started project."
执行提交后检查状态,Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的,即提交正常。
现在版本库变成了这样,暂存区就没有任何内容了:
Git跟踪并管理的是修改,而非文件。每次修改,如果不用git add到暂存区,那就不会加入到commit中。
标记 | 作用 |
---|---|
-m | 让Git在提交历史中记录一条消息。 |
-a | 让Git将仓库中所有修改了的文件都加入当前提交中 |
-am | 让Git将仓库中所有修改了的文件都加入当前提交中并在提交历史中记录一条消息 |
--pretty=oneline | 指定显示两项最重要的信息:提交的引用ID和为提交记录的消息 |
七.查看提交历史
Git 记录所有的项目提交,通过命令可查看提交历史
git log
命令显示从最近到最远的提交日志
git log
打印提交历史精简版本:
git log --pretty=oneline
标记--pretty=oneline
指定显示两项最重要的信息:提交的引用ID和为提交记录的消息。
注:你看到的一大串类似1094adb…的是commit id(版本号)
八.第二次提交
当修改了项目文件时,若此时查看项目状态,将发现Git注意到了文件发生了变化。
我们再次执行提交命令
git commit -am "Extended greeting."
在执行提交命令后指定了标记-am
,让Git将仓库中所有修改了的文件都加入当前提交中并在提交历史中记录一条消息,(若两次提交之间创建了新文件,可再次执行命令git add .
将这些新文件加入仓库中。)
最后,可查看提交历史中记录了一条信息。
九.撤销修改
适用于修改了文件尚未提交修改的情况,使用命令可放弃所做修改,修复到前一个可行状态。
git checkout .
命令git checkout
使你能够恢复到以前的任意提交,
命令git checkout .
放弃最后一次提交后所做的所有修改,将项目恢复到最后一次提交的状态。
命令git checkout -- file
意思就是,把文件在工作区的修改全部撤销,这里有两种情况:
一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- file
命令中的–很重要,没有--
,就变成了“切换到另一个分支”的命令
注:
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file
。git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。 - 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。 - 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,使用版本穿梭命令
git reset --hard commit_id
,不过前提是没有推送到远程库。
十.检出/恢复以前的提交
可通过命令git check
末尾指定该提交的引用ID的前6字符(而不是句点)。
git checkout ee7941
检出以前的提交后,将离开分支master,**进入分离头指针(HEAD)**状态。HEAD指针表示当前提交的项目状态,所谓分离状态即离开了一个命令分支(这指master)
在Git中,用HEAD
表示当前版本,也就是最新的提交的版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
。
若要回到分支master,可检出它:
git checkout master
若想放弃近期提交并回复到以前的状态,可将项目重置到以前的提交,可处再分支master上的情况下,执行如下命令:
git reset --hard ee76419
执行该命令,并在其中指定要永久恢复到的提交的引用ID前6字符。再次查看提交历史时,会发现我们回到了要重新开始的提交。你让HEAD指向哪个版本号,你就把当前版本定位在哪。
故:
1.HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
2.穿梭前,用git log
可以查看提交历史,以便确定要回退到哪个版本。
3.要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。
十一.删除文件
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了,这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了。
现在你有两个选择:
- 一是确实要从版本库中删除该文件,那就用命令
git rm
删掉,并且git commit
,则文件就从版本库中被删除了。 - 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
git checkout -- file
.
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。从来没有被添加到版本库就被删除的文件,是无法恢复的.
命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
十二.删除仓库
若仓库的历史记录混乱,且不知道如何恢复,可选择将项目的历史记录删除–删除目录.git
。这不会影响任何文件的当前状态,只会删除所有提交,故无法再检出项目的任何状态。
删除后则需重建一个仓库,重新对修改进行跟踪,大致过程如下:
git status //查看状态
rm -rf .git //删除目录.git
git status
git init //新建一个全新的仓库
git status
git add . //将所有文件都加入仓库
git commit -m "Starding over." //执行第一次提交
git status
十三.分支操作:
1.创建分支
创建新的分支 dev :
git branch dev
2.切换分支
创建新的分支 dev
git checkout dev
3.合并分支
合并分支的操作需要在非合并分支之外
git checkout master #切换到主分支 master 上
git merge dev #合并分支dev
此文章参照自《Python编程 入门到实践》附录D 使用Git进行版本控制 一文,如有侵权,请联系作者。