git版本控制初始

来源:互联网 发布:艾默生ups监控软件 编辑:程序博客网 时间:2024/05/18 16:55

Git目录

         Git是一个命令行实用程序的集合,会跟踪和记录文件中的更改(通常是源代码,但是可以跟踪任何想要的文件)

         通过git,可以恢复项目的旧版本,比较,分析,合并更改等操作.这个过程就被称为是版本控制.

         Git是分散的,这就意味着不依赖于中央服务器来保留文件的旧版本.相反,他完全在本地运行,将这些数据作为一个文件夹存储在硬盘上,我们称之为储存仓库.但是,也可以在线存储存库的副本,这使得多个人可以轻松并使用相同的代码.

 

安装git git for windows,可以使用GUI可视化客户端和一个BASH命令行模拟器.

配置Git

         安装结束git,需要进行添加一些快速配置.

         打开终端,运行命令:

    

      $git config –global user.name “my name”         $git config –global user.email myemail@example.com

         这样在git中所做的每一个动作都会贴上我们的名字和地址.

创建一个新的存储库 git init

         正如我们前面提到的,git将他的文件和历史记录直接存储在项目文件夹中.要建立一个新的存储库,我们需要打开一个终端,导航到我们的项目目录并裕兴git init.这将打开git这个特定的文件夹,并创建一个隐藏的.git目录,其中存储库的历史和配置.

         在桌面上创建一个名为git_exercise的文件夹,打开一个新的终端并输入一下内容:

         $cd Desktop/git_exercise/         $git init


命令行应该按照一下方式输出:

         Initializedempty Git reponsitory in /home/user/Desktop/git_exercise/.git/

这就意味着我们已经成功创建,但内容是空的.现在创建一个名为hello.txt的简单文本文件,并将其保存在git_exercise文件夹中.

 

检查状态– git status

Git status是另一个必须知道的命令,他返回关于仓库当前状态的信息:一切是最新的信息,哪些是最新的,哪些是改变的.等等.

运行git status在我们新创建的Log应该返回以下内容:

         $git status         Onbranch master         Initialcommit         Untrackedfiles:         (use“git add …” to include in what will be committed)                   Hello.txt


 

返回的消息指出hello.txt未被跟踪.这意味着文件是新的.git不知道它是否跟踪发生在这个文件上的变化,或者忽略它.为了确认新文件,我们需要对其进行分类.

 

添加– git add

Git有一个”暂存区”的概念.可以把它想象成一个空白的画布,保存着你想要提交的变化,他开始是空白的,但可以用命令添加文件(甚至是单行和部分文件)git add,最后提交所有的文件(创建一个快照)git commit.

在我们的情况下,我们只有一个文件,所以让我添加上面新建的这个文件:

$ git addhello.txt

如果我们想在目录中添加所有内容,我们可以使用:

$ git add –A.

再次检查状态 输入git status 应该返回以前的不同输出.

         $ git statusOnbranch masterInitialcommitChangesto be committed:  (use "git rm --cached ..." tounstage)newfile:   hello.txt


 

我们的文件已经准备好提交.

状态消息还提示我们暂存区中的文件有什么变化,-在这种情况下是新文件,但是可以修改或删除他,这取决于自上次文件发生了什么 git add.

 

Git commit

一个提交表示在给定的时间点我们的仓库的状态.这就像一个日志记录.

要创建一个新的提交.我们需要至少有一个更改添加到暂存区域(我们这样做git add)然后运行一下命令:

         $git commit –m “Initial commit.”


这将创建一个新的提交,其中包含来自暂存区域的所有更改(添加hello.txt).该–m “Initial commit”部分是用户自定义的描述,总结了在该提交中所做的更改.经常提交并总是编写有意义的提交信息,是一个开发者的好习惯.

 

远程仓库:

         现在我们的提交是本地的 –他存在于 .git文件中.虽然本地存储库本身是有用的,但在大多数情况下,我们希望共享我们的工作并将其部署到服务器或存储库托管服务.

         1,连接到远程存储库 –git remote add

         为了上传东西到一个远程的响应.我们首先必须建立一个连接..我们的存储库地址在github上面.

         要将我们的本地存储库与GitHub上的存储库连接起来,我们在终端中执行以下行:

         $git remote add origin https://github.com/......

         项目可能同时拥有多个远程仓库.为了能搞区分他们,我们给他们取名不同.origin就是名称

         2,上传到服务器 – gitpush

         把本地代码提交转移到服务器上的过程称为推送(push),并且每当我们想要更新远程仓库就完成了.

         Git命令是这样做的.gitpush并且需要两个参数-远程回购(我们称之为我们的产地)的名称和推到的分支(master是每个反馈的默认分支)

 

        $git push origin masterCounting objects: 3, done.Writingobjects: 100% (3/3), 212 bytes | 0 bytes/s, done.Total 3(delta 0), reused 0 (delta 0)To https://github.com/Tamic/novate.git * [new branch]     master -> master

 

根据使用的远程服务,需要验证自己的密码和账号.如果一切正常完成,在网络浏览器中进入前面创建的远程仓库时,hello.txt应该在那里,并且可以打开阅读.

 

3 克隆仓库  - git clone

在本地下载,并使用git clone命令获得项目的完整工作副本:

$ git clone https://github.com/...

自动创建一个新的本地仓库,并将github版本配置为远程.

4从服务器获取更改– git pull

如果代码仓库已经进行了更新,使用- git pull下载更改.

$ git pull origin master

 

From https://github.com/...

         * branch            master     ->FETCH_HEAD

Alreadyup-to-date.

由于我们克隆的没有其他人提交的文件或者修改,下载时候提示没有任何变化.

分支:

在开发一个新功能时,考虑一个原始项目的副本,称为分支,也被认为开发者的一个好习惯.

分支有他们自己的历史记录.并将他们之间的变化隔离开来,直到决定把他们合并在一起.

         一个已经工作,稳定的代码版本不会被破坏.

         许多功能可以由不同的人自己立马并能安全稳定的开发.

         开发人员可以在自己的分支上工作,而不会因为别人的工作而改变代码库的风险.

         当不确定什么是最好的时候,可以在不同的分支上开发相同特征的多个版本,然后进行比较.

 

创建新的分支机构– git branch

每个存储库的默认分支称为主(master) 分支

要创建更多分支,可以使用 git branch <name> 命令.

$ git branch amazing_new_feature.

 

这只是创建了新的分支,在这一点上是完全一样的.我们的主干.

 

切换分支– git checkout

现在,当运行git branch,我们可以看到两个选项可用:

 

        $git branch  amazing_new_feature* master

Master是当前分支,并标有星号.但是,我们想要使用我们的新功能,所以我们需要切换到另一个分支.这是用git checkout命令完成的.需要一个参数– 要切换到的分支名称.

 

        $git checkout amazing_new_feature

合并分支– git merge

Git的”惊人的新功能”将称为另一个名为feature.tx的文本文件.我们将创建它,add,并commit;

$ git add feature.txt$ git commit -m “新功能完成”。


新功能完成后,我们可以切回到主分支

$ git checkout master.现在,如果我们在文件浏览器中打开我们的项目,我们会注意到feature.txt已经消失了.因为我们回到了master分支,而这里feature.txt从来没有被创建过.为了实现这个目标,我们需要将这git merg两个分支结合在一起,将在amaing_new_featture中完成的更改应用于项目的主版本.

Git 合并amazing_new_feature.

主分支现在是最新的.awesome_new_feature分支不再需要,可以删除.

Git branch –d amazing_new_feature

 

高级操作:

 

检查提交之前的差异

每个提交都以数字和符号的字符串形式存在唯一的ID.要查看所有提及及其ID的列表.我们可以使用git log:

  

       $git logcommitba25c0ff30e1b2f0259157b42b9f8f5d174d80d7Author:TutorialzineDate:  Mon May 30 17:15:28 2016 +0300                 New feature completecommitb10cc1238e355c02a044ef9f9860811ff605c9b4Author:TutorialzineDate:  Mon May 30 16:30:04 2016 +0300    Added content to hello.txtcommit09bd8cc171d7084e78e4d118a2346b7487dca059Author:TutorialzineDate:  Sat May 28 17:52:14 2016 +0300    Initial commit

ID是很长的,但是和他们一起工作时,没有必要复制整个东西,前几个符号通常就足够了..

要查看提交中的新增内容.我们可以运行git show[commit];

$ git show b10cc123

commit b10cc1238e355c02a044ef9f9860811ff605c9b4Author: TutorialzineDate:   Mon May 30 16:30:04 2016 +0300     Added content tohello.txt diff --git a/hello.txt b/hello.txtindex e69de29..b546a21 100644--- a/hello.txt+++ b/hello.txt@@ -0,0 +1 @@+Nice weather today, isn't it?


 

要查看任何两个提交之间的区别,我们使用git diff[commit-from]..[commit-to]语法;

 

$ git diff 09bd8cc..ba25c0ff

 

diff --git a/feature.txt b/feature.txt

new file mode 100644

index 0000000..e69de29

diff --git a/hello.txt b/hello.txt

index e69de29..b546a21 100644

--- a/hello.txt

+++ b/hello.txt

@@ -0,0 +1 @@

+Nice weather today, isn't it?

 

我们已经比较了第一次提交和最后一次提交.所以我们看到了所有的改变.通常使用这个git difftool命令可以更容易地完成这个任务,这个命令可以让一个图形化的客户端显示所有的差异.

 

将文件恢复到以前的版本:

Git允许我们将任何选定的文件返回到某个提交中的方式,这是通过git checkout.我们以前用来切换分支的熟悉的命令完成的,但是也可以用来在提交之间切换(在Git中一个命令用于多个看起来不相关的任务是很常见的).在下面的例子中,我们将采用hello.txt,并将自从初始提交以来所做的一切都撤销.要做到这一点,我们必须提供我们想要返回的提交的id,以及我们文件的完整路径.

$ git checkout 09bd8cc1 hello.txt

 

修复提交

如果你注意到你在提交信息中输入了一个错字,或者你忘记了添加一个文件,并且在提交之后你看到了,你可以很容易的解决这个问题git commit –amend.这将添加从上次提交到暂存区域的所有内容,并尝试进行新的提交.这给一个机会来解决提交信息或添加更多的文件到临时区域.

 

对于不在上次提交中的更复杂的修复(或者已经推送了更改),则必须使用git revert.这将采取提交引入的所有更改,将其回滚,并创建一个与此相反的新提交.

最新的提交可以被HEAD别名访问.

$ git revert HEAD

对于其他提交,最好使用一个id.

$ git revert b10cc123

当恢复较旧的提交时,记住合并冲突很可能会出现.

当一个文件被另一个更近的提交改变时,会发生这种情况,现在git找不到正确的行来恢复,,

 

解决合并后的冲突.:

除了前面所描述的情况之外,在合并分支或者牵扯其他人的工作时经常出现冲突..有时候,冲突是由git自动处理的,但有时候处理这些冲突的人必须决定(通常是精选)哪些代码保留,什么被删除.

 

5,设置.gitignore

在大多数项目中都有我们不想提交的文件或整个文件夹.

我们可以git add -A通过创建.gitignore文件来确保他们不会被意外的包含在我们的内容中.

手动创建一个名为.gitignore的文本文件,并将其保存在项目目录中

在里面,列出要忽略的文件/目录的名称,每个都在一个新的行上.

.gitignore本身必须被添加,提交和推送.就像项目中的任何其他文件一样.

 

附:

Git常用命令:

         Gitlog  --不合并

         这个git命令显示整个提交历史记录,但是会跳过合并两个分支的提交或解决合并冲突.这使可以快速查看对项目所做的所有更改,而无需合并提交混乱的git历史记录.

         Gitrevert – 无提交[提交]

         Git还原生成一个新的提交,撤销现有提交所做的更改,并生成一个新的提交结果内容.如果想恢复命名的提交,并避免自动提交,可以使用标志 – 无提交 或简写 –n;

         Gitdiff –w

         Gitdiff显示两个提交,两个工作树或磁盘上的两个文件之间的变化.当多个人在同一个项目上工作时,由于文本编辑器的选项卡和空间设置,经常会有变化.为了在比较行时忽略由空白引起的差异,可以将其与-w标志一起使用.

         Gitdiff –stat

         显示每个文件如何随时间而改变.可以添加三个参数: 覆盖默认的输出大小,名称,大小,设置文件名的大小和计数的输出限制为线的第一个号码.

         Gitreset –soft HEAD ^

         在不改变索引文件和工作树的情况下将头重置为某条记录提交.在这个提交之后所做的所有更改都将移至”提交阶段”.之后,只需要运行git commit添加到本地分支上.

         Gitbranch –name[分支名称][name]

         这个命令创建一个名为branch-name的新分支并将其检出,然后将给定的存储中的更改应用到它并删除存储.

         如果没有存储,他使用最新的一个.这使可以将任何隐藏的更改应用到更安全的环境中,稍后可以将其合并到主环境中.

         Gitbranch –a

         显示了所有远程跟踪和本地分支的列表.可以使用—merged标志仅查看完全合并到主分支的分支.这样就可以跟踪你的分支,找出哪些不被使用,方便可以删除.

         Gitcommit –amend

         随着git commit –amend可以改变以前的提交,而不是做一个新的.如果没有将更改推送到远程分支,则可以使用此命令修改最近的提交,添加最新的更改,甚至更改后提交信息.

         Gitpull –rebase

         Gitpull –rebase强制git先拉出更改,然后重新绑定最新版本的远程分支上的unpushed提交.—rebase选项可用于通过防止不必要的合并提交来确保线性历史记录.

         Gitadd –p

         当使用这个命令,而不是立即添加所有的变化到索引,会经历每个变化,并询问是否想要做什么.这样,就可以交互的选择想要承诺的东西.

原创粉丝点击