Git学习笔记 001 Git基础 part2-part文件

Git学习笔记 001 Git基础 part2-part文件

本篇学习Git的基础支持。基于官网提供的中文版入门书籍Pro Git的章节Git基础。

撤销操作

追加提交

如果已经提交了文件,但是发现有漏掉的文件还需要提交,这时候直接执行commit命令,会产生第二次提交。使用commit --amend命令则会将后一次提交合并至前一次,两次操作合并为一次提交

笔者一共操作了三次,第一次只执行commit命令,截图没有保留。下面是第二次,但是使用了commit --amend的结果

$ git commit --amend -m "combine commit"

[master fec3551] combine commit

Date: Mon Apr 1 21:13:33 2019 +0800

5 files changed, 2 insertions(+), 3 deletions(-)

delete mode 100644 Information.txt

delete mode 100644 README.md

create mode 100644 forgetFile.txt

create mode 100644 normalCommit.txt

下面是第三次,也使用了commit --amend的结果

$ git commit --amend -m "combine commit second time"

[master 6fa2268] combine commit second time

Date: Mon Apr 1 21:13:33 2019 +0800

4 files changed, 2 insertions(+), 3 deletions(-)

delete mode 100644 Information.txt

delete mode 100644 README.md

create mode 100644 normalCommit.txt

使用log命令确认一下commit的详细情报会看到只有三条记录,第二条和第三条分别是昨天的commit和工程刚建立时的初始化commit。证明刚刚执行的三次commit操作被合并成了一次。

$ git log --pretty=oneline

6fa2268d1f6f1db13d3f233982fdd274af5c1381 (HEAD -> master) combine commit second time

c4bea312bd0676dcdf00a40bb38fb2930bc82afe First commit

6e2fa0997c2ce0bd01c289000c70795d232676ca (origin/master, origin/HEAD) Initial commit

取消缓存

使用git add可以是文件缓存,使用命令git reset HEAD fileName 可以取消这个操作。实际应用过程中,很少使用add命令来添加缓存,所以这个取消缓存的操作不实际操作。只留笔记备查。

撤销对文件的修改

对某个文件进行了修改,但是还没有commit的时候,确认它的状态

$ git status

On branch master

Your branch is ahead of 'origin/master' by 2 commits.

(use "git push" to publish your local commits)

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: normalCommit.txt

no changes added to commit (use "git add" and/or "git commit -a")

想放弃对文件的修改,使其返回上次commit时的状态,可以使用

$ git checkout -- normalCommit.txt

注意,--后面和文件名字中间有一个空格。

再次确认文件状态

$ git status

On branch master

Your branch is ahead of 'origin/master' by 2 commits.

(use "git push" to publish your local commits)

nothing to commit, working tree clean

实际工作中,可能使用revert命令更多一些。

远程仓库的使用

之前介绍的加入缓存add,以及提交commit操作的都是本地仓库。但是实际的开发中,仓库总是在远程服务器上进行管理的。如上一章介绍,使用clone命令可以克隆远程仓库到本地。

使用remote命令可以显示远程仓库列表,前面的origin是git给被克隆的仓库服务器的默认命名

$ git remote -v

origin https://github.com/Kutilion/GitTestProject.git (fetch)

origin https://github.com/Kutilion/GitTestProject.git (push)

当然如果克隆了多个远程仓库,这个命令会将它们的信息都显示出来。

添加远程仓库

使用remote add命令可以添加远程仓库,纵然这个仓库不存在也会添加进列表。比如

git remote add gt2 https://github.com/Kutilion/GitTestProject

这是当前仓库,相当于取了gt2的别名。之后又添加了一个不存在的仓库

$ git remote add gt3 https://github.com/Kutilion/GitTestProject2

使用fetch命令操作存在的仓库

$ git fetch gt2

From https://github.com/Kutilion/GitTestProject

* [new branch] master -> gt2/master

使用fetch命令操作不存在的仓库

$ git fetch gt3

remote: Repository not found.

fatal: repository 'https://github.com/Kutilion/GitTestProject2/' not found

实际工作中,基本不会使用remote add命令。而且添加远程仓库后如果在本地操作需要之后进一步学习。

从远程仓库中抓取

git fetch [remote-name]

使用git fetch [remote-name]命令可以会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。它和git pull命令有些不同。fetch命令指示抓取本地没有的数据, 但是不会合并到当前的工作。而pull则会合并当前工作。所以实际工作中pull很常用。

推送本地仓库到远程仓库

git push [remote-name] [branchname]

使用git push [remote-name] [branchname]命令可以将已经commit的文件推送到远程仓库。这也是最常用的命令。想push本地文件到远程, 首先要pull一次,看看远程文件有没有更新,否则会被服务器拒绝。当然,如果多人修改同一个文件,就算pull了文件,push的时候也会发生冲突。关于冲突的解决,之后学习展开。

查看远程仓库的信息

$ git remote show gt2

fatal: TaskCanceledException encountered.

Username for 'https://github.com': kutilion

V* remote gt2

Fetch URL: https://github.com/Kutilion/GitTestProject

Push URL: https://github.com/Kutilion/GitTestProject

HEAD branch: master

Remote branch:

master tracked

Local ref configured for 'git push':

master pushes to master (fast-forwardable)

上面的fatal部分是因为第一次执行,需要输入账号密码。这个命令可以查看远端服务器的所有分支状态,以及本地分支。

远程仓库的移除与重命名

通过以下命令,移除了没有远端仓库的条目

$ git remote rm gt3

这时,通过remote -v确认状态返现gt3已经没有了

$ git remote -v

gt2 https://github.com/Kutilion/GitTestProject (fetch)

gt2 https://github.com/Kutilion/GitTestProject (push)

origin https://github.com/Kutilion/GitTestProject.git (fetch)

origin https://github.com/Kutilion/GitTestProject.git (push)

重命名操作,只是在本地更改简称

$ git remote rename gt2 gtNew

$ git remote -v

gtNew https://github.com/Kutilion/GitTestProject (fetch)

gtNew https://github.com/Kutilion/GitTestProject (push)

origin https://github.com/Kutilion/GitTestProject.git (fetch)

origin https://github.com/Kutilion/GitTestProject.git (push)

推荐阅读