GIT学习笔记(2):时光机穿梭与远程仓库
撤销操作
GIT如何跟踪修改
在我们修改了代码内容后,执行了git add和git commit命令来将其交由Git进行版本控制。我们前面举的例子是这样的,git add将文件加入暂存区(菜篮子),git commit一并提交到版本库(柜台结账)。如果我们想拿其他的菜,但是不加入篮子,Git是无法对其进行跟踪的。
比如我们队Test.java第一次修改后,执行git add命令将第一次修改版本加入了暂存区,然后又修改了Test.java,但是commit负责暂存区的修改提交了,所以第二次的修改不会被提交。
那我们该如何将第二次修改的内容提交呢?将其加入暂存区即可。add命令是将目标文件加入跟踪列表,每一次跟踪以commit为准,也就是说你只要没有commit,不管你什么时候把这个文件add进去,最终结果是你文件最后一次修改的结果。
说明:简而言之,如果不用git add到暂存区,那就不会随commit提交到版本库。
撤销修改
修改最后一次提交
有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 --amend
选项重新提交:
比如我们提交后,发现忘添加MyClass.java文件了,我们可以把git add MyClass.java,然后重新提交。下面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。
取消暂存的文件
这个也很好理解,我们使用git add . 将所有文件加入到了暂存区,但是有了文件不需要提交,我们可以把它从暂存区取消。
说明:这里我们使用了命令git reset HEAD <file>...来取消暂存。
取消对文件的修改
如果觉得刚才对 Test.java 的修改完全没有必要,该如何取消修改,回到之前的状态(也就是修改之前的版本)呢?
说明:这里要说明的一点是,如果Test.java加入到了暂存区,又做了修改,现在,撤销修改就回到了暂存区后的状态。如果文件被删除了,也是可以找回的哦!
远程仓库
远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某个项目时,需要管理这些远程仓库,以便推送或拉取数据,分享各自的工作进展。 管理远程仓库的工作,包括添加远程库,移除废弃的远程库,管理各式远程库分支,定义是否跟踪这些分支,等等。本节我们将详细讨论远程库的管理和使用。
查看当前远程仓库
要查看当前配置有哪些远程仓库,可以用 git remote
命令,它会列出每个远程库的简短名字。在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库:
如图,我们也可以加上 -v
选项(译注:此为 --verbose
的简写,取首字母),显示对应的克隆地址。
添加远程仓库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]
:
重命名远程仓库
$ git remote rename pb paul
$ git remote
origin
paul
删除远程仓库
$ git remote rm paul
$ git remote
origin
查看远程仓库的信息
这部分内容,我们将在下一篇文章中讲述分支管理后,着重说明。
从远程仓库抓取数据
现在可以用字符串 pb
指代对应的仓库地址了。比如说,要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行 git fetch pb
:
说明:此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。
推送数据到远程仓库
项目进行到一个阶段,要同别人分享目前的成果,可以将本地仓库中的数据推送到远程仓库。实现这个任务的命令很简单: git push [remote-name] [branch-name]
。如果要把本地的 master 分支推送到 origin
服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字),可以运行下面的命令:
$ git push origin master
只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,合并到自己的项目中,然后才可以再次推送。有关推送数据到远程仓库的详细内容接下来的文章。
这里依然涉及到分支管理的概念,我们将在接下来的文章中详细说明。