您现在的位置是:网站首页 > 心得笔记

Git快速入门

盛悦2019-06-24535人围观
简介最近要使用Git了,重新整理下先关知识........

1.       创建Repository(仓库)

1.png

2、获取 Git 仓库

方法:克隆现有的仓库

2.png

克隆好后,在本地对应目录下可以看到:

3.png

打开该目录后,可以看到和仓库上完全一样:

4.png

3、更新提交到仓库

3.1、检查当前文件状态

要查看哪些文件处于什么状态,可以用 git status 命令。 如果在克隆仓库后立即使用此命令,会看到类似这样的输出:

$ git status


 

5.png

 

这说明现在你的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过。当前所在分支是master

 

 

现在,在项目下创建一个新的 mytext.txt 文件。 如果之前并不存在这个文件,使用 git status 命令,将看到一个新的未跟踪文件:

 

6.png

在状态报告中可以看到新建的 README 文件出现在 Untracked files 下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围,除非你明明白白地告诉它“我需要跟踪该文件”, 这样的处理让你不必担心将生成的二进制文件或其它不想被跟踪的文件包含进来。 不过现在的例子中,我们确实想要跟踪管理 README 这个文件。

 

3.2、跟踪新文件

使用命令 git add 开始跟踪一个文件。 所以,要跟踪 mytext.txt 文件,运行:

$ git add mytext.txt


 

7.png

此时再运行 git status 命令,会看到 mytext.txt 文件已被跟踪,并处于暂存状态

只要在 Changes to be committed 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。

 

3.3、暂存已修改文件

现在我们来修改一个已被跟踪的文件。上面的mytext.txt文件已被跟踪,并处于一暂存状态,vi编辑文件,在文件的未尾加入一行内容:这是暂存已修改文件示例,然后运行 git status 命令,会看到下面内容:

8.png

文件 mytext.txt 出现在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。要暂存这次更新,需要运行 git add 命令。 这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。 现在让我们运行 git add 将”mytext.txt“放到暂存区,然后再看看 git status 的输出:

9.png

现在 README.md 文件同时出现在暂存区和非暂存区。现在让我们运行 git add README.md放到暂存区,然后再看看 git status 的输出:

10.png

这时候 mytext.txt就已经在暂存区了!

 

3.4、状态简介

git status 命令的输出十分详细,但其用语有些繁琐。 如果你使用 git status -s 命令或 git status --short 命令,将得到一种更为紧凑的格式输出。 运行 git status -s,状态报告输出如下:

$ git status -s
 M README.md
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

 

新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。 例如,上面的状态报告显示: README 文件在工作区被修改了但是还没有将修改后的文件放入暂存区,lib/simplegit.rb 文件被修改了并将修改后的文件放入了暂存区。 而 Rakefile 在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。

 

3.5 查看已暂存和未暂存的修改

如果 git status 命令的输出对于你来说过于模糊,你想知道具体修改了什么地方,可以用 git diff 命令。git diff,可能通常会用它来回答这两个问题:当前做的哪些更新还没有暂存? 有哪些更新已经暂存起来准备好了下次提交? 尽管 git status 已经通过在相应栏下列出文件名的方式回答了这个问题,git diff 将通过文件补丁的格式显示具体哪些行发生了改变。

假如再次修改 mytext.txt 文件后暂存,然后编辑 mytext.txt 文件并在文件的最后追加一行内容:”我的朋友还剩下谁?“ 之后先不暂存, 运行 git status 命令将会看到:

11.png

要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff

12.png

上面输出显示有加一行“+我的朋友还剩下谁?”,前面带有一个加号:“+”。

请注意,git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。

然后用 git diff --cached 查看已经暂存起来的变化:(--staged --cached 是同义词)

13.png

 

3.6 提交更新

现在的暂存区域已经准备妥当可以提交了。 在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。 这些修改过的文件只保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了,如果没有暂存起来则要先使用命令:git add .将所有文件暂存起来, 然后再运行提交命令 git commit:

$ git status
$ git add 文件名
$ git commit

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

$ git commit -m "this is my commit info note." 
[master 463dc4f] Story 182: Fix benchmarks for speed 
2 files changed, 
2 insertions(+) 
create mode 100644 README.md

可以看到,提交后它会告诉你,当前是在哪个分支(master)提交的,本次提交的完整 SHA-1 校验和是什么(463dc4f),以及在本次提交中,有多少文件修订过,多少行添加和删改过。

请记住,提交时记录的是放在暂存区域的快照。任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。 每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。


3.7 移除文件

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “Changes not staged for commit” 部分(也就是 未暂存清单)看到:


3.8 移动文件

$ git mv file_from file_to

 

其实,运行 git mv 就相当于运行了下面三条命令:

$ mv README.md README
$ git rm README.md
$ git add README

 

4、查看远程仓库

如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出你指定的每一个远程服务器的简写。 如果已经克隆了自己的仓库,那么至少应该能看到 origin - 这是 Git 给你克隆的仓库服务器的默认名字:

14.png 

4.1、从远程仓库中抓取与拉取

从远程仓库中获得数据,可以执行:

$ git fetch [remote-name]


这个命令会访问远程仓库,从中拉取所有还没有的数据。执行完成后,将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。

如果使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 git fetch 命令会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作。 当准备好时必须手动将其合并入你的工作区。

如果你有一个分支设置为跟踪一个远程分支,可以使用 git pull 命令来自动的抓取然后合并远程分支到当前分支。 这对你来说可能是一个更简单或更舒服的工作流程;默认情况下,git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或不管是什么名字的默认分支)。 运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。

15.png

 

 

4.2、 推送到远程仓库

当想分享你的项目时,必须将其推送到上游。 这个命令很简单:git push [remote-name] [branch-name]。 当你想要将 master 分支推送到 origin 服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字),那么运行这个命令就可以将所做的备份到服务器:

$ git push origin master



只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。

现在我们要把前所有添加和修改的内容添加到远程仓库,以便其协同的开发人员也可以获取到我们提交的内容。执行以下命令时,会要求我们输入在注册的用户名和密码。

$ git push origin master


 

16.png

出现这种情况,还是去找你老大给你分配权限,让你可以正常推送代码到仓库!!!比如我:当我发现推不上去代码,立刻向老大反应,于是乎,成功分配了权限

17.png