本篇学习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)