软件构造----Git 个人总结

什么是Git

Git yyds!
Git是目前世界上最先进的分布式版本控制系统(没有之一)。

分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库。这样,工作时就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

创建版本库(repository)

首先,选择一个合适的地方,创建一个空目录

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

第二步,通过git init命令把这个目录变成Git可以管理的仓库。

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

在当前仓库文件夹下,用ls -ah命令可以查看内容:当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,正常情况下不要擅自修改。

ps.并不是必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。

使用Windows时要特别注意
千万不要使用Windows自带的记事本编辑任何文本文件。建议使用Notepad++代替记事本。把Notepad++的默认编码设置为UTF-8 without BOM即可。

添加文件到Git仓库,分两步:

使用命令git add <file>,注意,可反复多次使用,添加多个文件;
使用命令git commit -m <message>,完成。
需要掌握工作区的状态的话,使用git status来查看。
如果git status告诉我们文件有修改过,那么可以用git diff查看修改的内容。

版本回退

git log命令显示从最近到最远的提交日志情况。
如果嫌输出信息太多,可以加上--pretty=oneline参数。
如果要回退到上一个版本:
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,
HEAD^表示上一个版本,前100个版本用HEAD~100表示。
使用git reset命令:

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed

此时使用git log查看,发现最新版本已经找不到了。
只要上面的命令行窗口还没有被关掉,就可以往上找,找到最新版本的commit id是1094adb…

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

ps.版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:
在这里插入图片描述
在这里插入图片描述
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

工作区和暂存区

工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
在这里插入图片描述
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
下面的命令可以查看工作区和版本库里面最新版本的区别:

$ git diff HEAD -- readme.txt 
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.

以下命令可以丢弃工作区的修改:

git checkout -- file

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

删除文件

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

$ rm test.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	deleted:    test.txt

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

现在你有两个选择:
一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
ps.从来没有被添加到版本库就被删除的文件,是无法恢复的!

添加远程库

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git

关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名;

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm <name>命令。使用前,建议先用git remote -v查看远程库信息:

$ git remote -v
origin  git@github.com:michaelliao/learn-git.git (fetch)
origin  git@github.com:michaelliao/learn-git.git (push)

然后,根据名字删除,比如删除origin

$ git remote rm origin

此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Posh-git-master是一个基于PowerShell的Git命令提示工具集。它提供了一组命令和函数,可以增强使用Git时的操作效率和体验。 Posh-git-master具有以下几个主要的特点和功能: 1. 命令提示符:Posh-git-master会自动显示当前所在的Git分支和工作目录状态。这使得用户可以一目了然地知道自己当前的操作环境。 2. 自动补全:使用Posh-git-master时,用户可以通过按Tab键进行命令补全。它会自动匹配并显示可能的Git命令、参数、分支名等,减少了用户的输入工作。 3. 提示信息:Posh-git-master会根据当前工作目录状态,提供相关的提示信息。比如,当存在未提交的修改时,它会在提示信息中显示相应的提示,以便用户及时提交修改。 4. 检查文件状态:Posh-git-master可以检查文件是否被修改、新增或删除,并将这些信息显示在提示信息中。这有助于用户了解自己的修改是否已经被Git跟踪。 5. 快捷命令:Posh-git-master通过提供一系列的快捷命令,简化了Git操作的流程。用户可以使用这些命令完成常用的操作,如提交修改、切换分支等,提高了开发效率。 总的来说,Posh-git-master是一个功能强大的Git命令提示工具集,可以帮助用户更高效地使用Git进行版本控制。无论是在个人项目还是团队协作中,它都能提供便利和支持。 ### 回答2: posh-git-master是一个在Windows操作系统上开发的Git命令行工具。它提供了一套方便的命令提示符和自动完成功能,使得在Windows终端中使用Git更加简便和高效。 posh-git-master的核心功能包括:Git命令的智能提示、状态信息的展示、分支名称的显示等。它通过改变命令提示符的颜色、添加分支信息和状态提示来提高命令行的可读性,帮助开发人员更好地理解和管理项目。 使用posh-git-master,开发人员可以更加方便地使用Git命令。它会根据当前的Git状态,自动显示当前所在的分支名称,并提示待提交、修改或冲突的文件。这样,开发人员可以快速了解当前工作区的状态,以及哪些文件需要被添加、提交或解决冲突。 此外,posh-git-master还提供了智能的命令提示功能。当输入Git命令时,它会根据已经输入的内容自动补全命令或参数,减少了人工记忆和输入的负担,提高了开发效率。 总之,posh-git-master是一个功能强大的Git命令行工具,它改善了Windows用户使用Git的体验。通过提供智能提示、状态信息展示和命令自动完成等功能,它帮助开发人员更好地理解、管理和操作Git版本控制系统,提高了开发效率和工作质量。 ### 回答3: posh-git-master是一种在Windows操作系统上使用的命令行工具,用于提供更加强大和便捷的Git版本控制功能。 posh-git-master可以让开发人员在命令行中直接使用Git命令,而无需切换到其他版本控制工具。它通过对命令行界面进行优化,实现了更加友好的用户体验和更高效的工作流程。 使用posh-git-master,开发人员可以轻松地查看当前所在的Git分支,以及在文件夹中进行版本控制操作。该工具还会在命令行中显示有关文件状态的信息,例如被修改的文件、待提交的文件、已经被追踪的文件等等。这些信息的展示可以帮助开发人员更好地维护 Git 仓库的状态,从而更加准确地进行版本控制和提交。 此外,posh-git-master还支持自定义提示符和补全功能。开发人员可以根据自己的喜好和习惯,将命令行的提示符定制为自己喜欢的风格。同时,工具还提供了自动补全功能,当开发人员输入命令或者文件路径时,可以自动匹配已经存在的Git命令或者文件名,大大提高了工作效率。 总之,posh-git-master可以帮助开发人员更好地管理和控制Git版本,并通过优化命令行界面提供更加便捷和高效的工作环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值