git的各种命令及实操中遇到的问题记录

集中式

分布式

git --version
查看版本

git的配置
pwd
/*
如果是linux下的命令的话 是print working directory
命令显示整个路径名
-L
如果 PWD 环境变量包含了不包含文件名 .(点)或 …(点点)的当前目录的绝对路径名,则显示 PWD 环境变量的值。否则,-L 标志与 -P 标志一样运行。
-P
显示当前目录的绝对路径名。与 -P 标志一起显示的绝对路径不包含在路径名的绝对路径中涉及到符号链接类型的文件的名称。
*/
进入家目录

设置email,usename

ll 命令查看详细信息

配置email
git config --global user.email "[email protected]"
git config --global user.name “leo0217”

pwd
cd …
cd
dir
ls
ll
初始化

git init
输入ls -a 显示所有文件。
./ …/ .git/
有点说明是隐藏目录

cd .git
ls
显示。git内容

pycharm .gitconfig在pycharm中显示配置文件信息
$ ll
total 7
-rw-r–r-- 1 Administrator 197121 157 一月 21 18:12 config
-rw-r–r-- 1 Administrator 197121 73 一月 21 18:12 description
-rw-r–r-- 1 Administrator 197121 23 一月 21 18:12 HEAD
drwxr-xr-x 1 Administrator 197121 0 一月 21 18:12 hooks/
drwxr-xr-x 1 Administrator 197121 0 一月 21 18:12 info/
drwxr-xr-x 1 Administrator 197121 0 一月 21 18:12 objects/
drwxr-xr-x 1 Administrator 197121 0 一月 21 18:12 refs/

带d是文件夹,带-的是文件
进入edu中.git
对初始化的仓库配置信息。
pycharm .config
git config username “leo0217”
git config useremail [email protected]"

18:50 创建仓库和维护旧仓库
进入git创建bbs
mkdir bbs
cd bbs
git init
创建了新仓库
ls -a
看所有隐藏文件

维护旧仓库
进入git文件夹(其中没有.git)
然后去网页上找网址,使用如下命令
git clone url

删除
rm -rf * 删除全部文件及子文件及目录,无法恢复,注意。

ls

=git流水线操作分析
==git 就是一个仓库。

==add,commit
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
$ git add file2.txt file3.txt
或者Git add .
===放车里,扔仓库
==如何观察仓库的变化:状态
===git status

新建一个车间
在git下mkdir db

git init

touch a.py
建立一个空白命令
pycharm a.py

git status 查看下状态
发现
“”"
$ git status
On branch master

Initial commit

Untracked files:
(use “git add …” to include in what will be committed)

    a.py

nothing added to commit but untracked files present (use “git add” to track)
‘’’

未跟踪状态

我们需要将他放到小推车里
git add a.py

创建文件
touch b.py创建空白文件#直接用pycharm创建不了文件
pycharm b.py用pycharm打开这个文件

如果有更改,则会出现红色modify
然后加入推车中
git add a.py
此刻变绿了
modified: a.py

推入仓库
$ git commit -m “第二次入库”
[master 7cc2daf] 第二次入库
1 file changed, 1 insertion(+)

再次
$ git status
On branch master
nothing to commit, working directory clean

如果一次创建了n个文件,如果要一个个加入推车和仓库比较麻烦
以下命令把所有的文件推入推车
git add .
$ git status
On branch master
Changes to be committed:
(use “git reset HEAD …” to unstage)

    new file:   c.py
    new file:   d.py
    new file:   e.py

变绿了。

但是如果有10个文件,5个想进仓库,另外5个不想进仓库,怎么办。
引出忽略文件。

版本库的忽略文件配置
新建shop项目,进入shop
Administrator@VBV06DVDWE0NZP1 MINGW32 /f/git
$ cd shop

Administrator@VBV06DVDWE0NZP1 MINGW32 /f/git/shop
$ git init
Initialized empty Git repository in F:/git/shop/.git/

Administrator@VBV06DVDWE0NZP1 MINGW32 /f/git/shop (master)
$ touch .gitignore

Administrator@VBV06DVDWE0NZP1 MINGW32 /f/git/shop (master)
$ dir

Administrator@VBV06DVDWE0NZP1 MINGW32 /f/git/shop (master)
$ ls -a
./ …/ .git/ .gitignore

Administrator@VBV06DVDWE0NZP1 MINGW32 /f/git/shop (master)
$ pycharm .gitignore

Administrator@VBV06DVDWE0NZP1 MINGW32 /f/git/shop (master)
$ touch a.txt

Administrator@VBV06DVDWE0NZP1 MINGW32 /f/git/shop (master)
$ git status
On branch master

Initial commit

Untracked files:
(use “git add …” to include in what will be committed)

    .gitignore
    a.txt

nothing added to commit but untracked files present (use “git add” to track)

进入.gitignore
写入*.txt
再看下状态
git static
$ git status
On branch master

Initial commit

Untracked files:
(use “git add …” to include in what will be committed)

    .gitignore

nothing added to commit but untracked files present (use “git add” to track)

不见了a.txt
不是文件被删了,而是版本库不再监控a.txt了
所有的txt都不再监控。

如果只想不监控a.py ,则在.gitignore文件中写a.txt
b.txt会被加入推车,会被监控,新增一个文件c.txt也会被监控加入推车。
此时git add . 时,除了a.py外,其他都加入推车。

如果只想提交a.py,其他的都要提交
则在.gitignore 中*.txt !a.txt
也可就是除了a.txt外其他都不提交。

在shop项目中添加一个目录
mkdir vendor
git status ,没有看到vendor
因为在git里,如果文件夹里没有文件不跟踪。

所以在vendor中新建文件
cd vender
mkdir n.py
cd …
git status
可以看到vendor已经在监控里面
如果不需要监控这个文件夹里的内容,则在.gitignore中添加这个文件夹
*.txt
!a.txt
/vendor
如果是文件夹,则忽略整个文件夹
如果是文件夹下面的子文件,则忽略子文件,其余文件及文件夹不受影响。
如果是文件夹下面子文件夹则忽略子文件夹里面全部内容

注意,推仓库的时候不能再子文件夹中。

出现问题,index.lock已存在,删除此文件,而后重启
从版本库中删除
但在本地还有。
$ git rm --cached a.txt
在没有使用git add a.txt 及没有使用git commit -m “测试”之前,
接下来我想看下readme.txt文件到底改了什么内容,如何查看呢?可以使用如下命令:

git diff readme.txt 如下:

在提交add和commit之后是无法看到的。

如何在查看仓库中的内容。

git log
推送记录,看不到最新的,要使用reflog
如果嫌上面显示的信息太多的话,我们可以使用命令 git log –pretty=oneline 演示如下:

$ git log
commit 37b6b48c2239e71689a1a0c8fd3898cc3bb8d051 (HEAD -> master)
Author: leo0217 [email protected]
Date: Tue Jan 22 13:31:54 2019 +0800

从仓库删除但是不彻底删除                                                    

commit 5cd8d44bd49fd98547d73fa650918aba11541771
Author: leo0217 [email protected]
Date: Tue Jan 22 13:30:52 2019 +0800

回滚到上一次的命令
$ git reset --hard HEAD^
回滚到上上一次用如下命令:
$ git reset --hard HEAD~2

查看文件内容cat a.txt
我们看到 增加333333 内容我们没有看到了,但是现在我想回退到最新的版本,如:有333333的内容要如何恢复呢?我们可以通过版本号回退,使用命令方法如下:

git reset --hard 版本号 ,

通过如下命令即可获取到版本号:git reflog 演示如下
$ git reflog
5cd8d44 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
37b6b48 HEAD@{1}: reset: moving to HEAD~2
086785a HEAD@{2}: commit: aaa
git reset --hard 37b6b48
不用HEAD

如果对已经在仓库里的文件进行修改后,查看状态后会发现是modified,通过add变绿,待推送
如果是新建的文件,则处于未跟踪的状态,红色,如果add后变绿,待推送。

而后可一起推送commit

git rm a.txt
将版本库和本地一起删除
git rm --cached 1.py

改名字。
mv改名
git mv readme.txt Readme.txt
如果不行,可以先手动改名后推送后从新推送

vim 1.py 修改文档

linux命令;i插入,esc退出,冒号:然后wq,w保存,q退出

日志功能
git log 获取日志信息
git log -p 全面的信息
git log -p -1最近一次日志,最近2次是-2
git log --oneline -p 全部信息
git log --oneline 一行显示

$ git log --name-only

$ git log --name-status

如果出现未显示完,使用wq保存退出。

修改描述
使用amend自改最新一个提交。
git commit --amend 进入修改描述,不是标题。

管理暂存区的文件
touch 1.py
git add 1.py
加入暂存区后后悔了
可以使用git rm --cached 1.py (2个–)这是第一次
此时退出暂存区,在生产车间。变红了
git status显示的是生产车间的状态、
对文件1.py进行编辑。而后提交到暂存区

这是第二次

直接删除某项文件或者文件夹
使用rm b.txt 不需要加git

如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

管理修改
版本回退
阅读: 1211064
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下:

Git is a distributed version control system.
Git is free software distributed under the GPL.
然后尝试提交:

$ git add readme.txt
$ git commit -m “append GPL”
[master 1094adb] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

现在,我们回顾一下readme.txt文件一共有几个版本被提交到Git仓库里了:

版本1:wrote a readme file

Git is a version control system.
Git is free software.
版本2:add distributed

Git is a distributed version control system.
Git is free software.
版本3:append GPL

Git is a distributed version control system.
Git is free software distributed under the GPL.
当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao [email protected]
Date: Fri May 18 21:06:15 2018 +0800

append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao [email protected]
Date: Fri May 18 21:03:36 2018 +0800

add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao [email protected]
Date: Fri May 18 20:59:18 2018 +0800

wrote a readme file

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
需要友情提示的是,你看到的一大串类似1094adb…的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线:

git-log-timeline

好了,现在我们启动时光穿梭机,准备把readme.txt回退到上一个版本,也就是add distributed的那个版本,怎么做呢?

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

现在,我们要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令:

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
–hard参数有啥意义?这个后面再讲,现在你先放心使用。

看看readme.txt的内容是不是版本add distributed:

$ cat readme.txt
Git is a distributed version control system.
Git is free software.
果然被还原了。

还可以继续回退到上一个版本wrote a readme file,不过且慢,然我们用git log再看看现在版本库的状态:

$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao [email protected]
Date: Fri May 18 21:03:36 2018 +0800

add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao [email protected]
Date: Fri May 18 20:59:18 2018 +0800

wrote a readme file

最新的那个版本append GPL已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?

办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL的commit id是1094adb…,于是就可以指定回到未来的某个版本:

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

再小心翼翼地看看readme.txt的内容:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
果然,我胡汉三又回来了。

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

git-head

改为指向add distributed:

git-head-move

然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file
终于舒了口气,从输出可知,append GPL的commit id是1094adb,现在,你又可以乘坐时光机回到未来了。小结

现在总结一下:

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

你也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行,如下所示:

只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

小结
又到了小结时间。

如果提交到暂存区,而后再次修改文件,最后直接commit,会发现使用git diff HEAD – 1.py时,第二次并未到版本库中。

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。存在2中情况,一种是已经提交了暂存区,一种是没有提交暂存区。都可以用这个命令。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。git reset --hard commit_id

如果
$ git checkout – a.py
error: pathspec ‘a.py’ did not match any file(s) known to git
是因为没有任何commit所以不能checkout

“”"
以下故障,待学习。

https://blog.csdn.net/hudashi/article/details/7664464/
On branch master
Changes to be committed:
(use “git reset HEAD …” to unstage)

    modified:   a.py

“”"

猜你喜欢

转载自blog.csdn.net/old_man31/article/details/86614677