Git

Git

Linux上安装git

在linux上我们建议你用二进制的方式来安装git,可以使用发行版包含的基础软件包管理工具来安装,如果你是是CentOS或者Fedora的操作系统,可以使用yum命令来安装git:

sudo yum install git

如果你是ubuntu或者是Debian可以使用apt-get的命令来安装git:

sudo apt-get install git

要了解更多选择, Git 官方网站上有在各种 Unix 风格的系统上安装步骤,网址为 http://git-scm.com/download/linux

Windows上安装

在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开http://git-scm.com/download/win,会检查你的操作系统是32位的还是64位的,并自动开始下载对应的安装包。

另一个简单的方法是安装 GitHub for Windows。 该安装程序包含图形化和命令行版本的 Git。 它也能支持Powershell,提供了稳定的凭证缓存和健全的换行设置。 你可以在 GitHub for Windows 网站下载,网址为 http://windows.github.com

Git配置

当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:

git config --global user.name “123”
git config --global user.email 123@qq.com

再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情,Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
很多 GUI 工具都会在第一次运行时帮助你配置这些信息。
你也可以使用git config --list来查看git的所有配置

获取帮助

若你使用 Git 时需要获取帮助,有三种方法可以找到 Git 命令的使用手册:

git help <verb>
git <verb> --help
man git-<verb>

例如,要想获得 config 命令的手册,执行

git help config

当然,如果你遇到问题也可以查看git的官方文档。
https://git-scm.com/book/zh/v2

Git原理

git的四个区域

Workspace: 工作区,就是你平时存放项目代码的地方

Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

工作流程

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件add到暂存区域;

3、将暂存区域的文件commit到git仓库;

4、本地的修改push到远程仓库,如果失败则执行第5步

5、git pull将远程仓库的修改拉取到本地,如果有冲突需要修改冲突。回到第三步

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

文件的四种状态

Untracked : 未跟踪, 此文件在文件夹中,但并没有加入到git库,不参与版本控制, 通过git add 状态变为Staged。

Unmodify: 文件已经入库且未修改, 即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去处,如果它被修改, 而变为Modified,如果使用git rm移出版本库, 则成为Untracked文件。

Modified:文件已修改,仅仅是修改,并没有进行其他的操作,这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout 则丢弃修改,返回到unmodify状态, 这个git checkout即从库中取出文件,覆盖当前修改

Staged:暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态。

Git常用命令

创建仓库

什么是仓库呢?就是可以用git管理的一个目录,这个仓库里所有的文件的改动(增加/修改/删除)都由git跟踪记录。也能通过git查看所有的记录,当然也能够通过git“还原”到某个记录点。在你要创建仓库的文件下,执行git init 初始化一个空的仓库

这个时候会在仓库目录下多了一个.git目录,.git目录里由很多关于git管理的文件,这里面的东西不用我们管,没事也别去瞎折腾。

有了仓库之后,我们就可以使用git add和git commit向仓库添加要跟踪的文件,和提交修改的内容了。

git add 与 git status

仓库里刚新建的文件是不会被跟踪起来的,比如我们使用git status就能查看到文件的状态,需要使用git add才可以

基本用法:

git add

通过git add 的方式把path目录下的所有文件添加到git的暂存区,当然这些文件不包含已经被删除的文件。

示例:

git add . # 将所有修改添加到暂存区

git add *.cpp  # 将以.cpp结尾的文件的所有修改添加到暂存区

git add hello*  # 将所有以Hello开头的文件的修改添加到暂存区,例如: helloWorld.txt,hello.h,helloGit.md ...

git add hello?.*  # 将以hello开头后面只有一位的文件提交到暂存区 例如:hello1.txt,helloA.cpp 如果是helloGit.txt和hello.cxx是不会被添加的。

git add 是把文件添加到暂存区,那如果想从暂存区删除呢?可以使用git rm -f (连带着会删除原文件)或者 git rm --cached(只是把文件从暂存区里移除,并不把文件从磁盘上删除,只是不被git管理了而已)

git commit

git add 只是把文件添加到暂存区而已,并没有真正跟踪起来,需要使用git commit命令提交到仓库才能真正被git跟踪记录,git commit命令的用法如下:

示例:

git commit -m "first commit"  #把暂存区和当前已被跟踪的文件的所有的修改提交到仓库里,-m参数指定了此次提交的message内容 

git commit info.log -m "save info.log"	# 提交info.log

  • git commit file1.name file2.name file3.name .. -m “commit messages”

    commit指提交修改到本地的仓库里,file*.name指的是带commit的文件 –m后面的内容指提交的信息,即备注

  • git commit -a -m “commit messeages”

    添加的-a参数会把当前暂存区里所有的修改(包括删除操作)都提交,但是那些尚未添加到暂存区的内容是不会提交的,网上有

很多的博客内容说-a参数会把尚未add的文件也提交了,这个说法是错误的。

修改你的提交

有时候,我们提交一个commit后,发现有些部分漏掉了,尤其是有的内容忘记添加到暂存区了,导致这些内容没有commit,那如果我们把这些“漏掉”内容作为一个新的commit提交总不太好,其实我们可以把“漏掉”的内容提交到上一个commit里。

还有时候,我们刚刚最近的一次提交的commit message写的内容不够严谨,需要重新整理下。

那上面的两种场景,我们怎么处理呢? 答案是git commit --amend 这个命令只能修改最近的一次提交

比如你想修改aaa的内容,同时再新增个bbb文件,最后修改上一次提交的message信息。

那你可以先修改完aaa后,然后把aaa和bbb通过git add .或者git add aaa.txt bbb.txt加到暂存区,然后使用git commit --amend把当前暂存区里的内容合并到上一次commit里,而且还可以修改上一次提交的message信息。

git commit --amend   # 跳出一个VIM编辑框,此时我们可以修改提交内容格式,然后保存退出(如下图)

Git会新增加一个commit-id覆盖了上一次的commit-id, 这样漏掉的文件会合并到上一次的提交,然后我们也修改了提交message的规范,大家可以通过git log –p去查看这次内容。当然我们除了添加“漏掉”的文件,也可以删除“误修改”的文件。最后使用git push –fore强制推送修改后的commit。

保存退出后,可以看到如下信息,然后再查看一下log和status

还有一个git rebase –i的操作。比较麻烦,懒得写了~~

git clone

git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。

拷贝项目命令格式如下:

git clone [url]

如从github上下载一个开源库

git clone https://github.com/alibaba/async_simple.git

git push

命令格式如下:

git push <远程主机名> <本地分支名>:<远程分支名>

如果本地分支名与远程分支名相同,则可以省略冒号:

git push <远程主机名> <本地分支名>

以下命令将本地的 master 分支推送到 origin 主机的 master 分支。(提前是已经有远端主机信息了,origin是远端主机的别名,一般从远程git clone下来后,在.git/config配置有)

$ git push origin master

相等于:

$ git push origin master:master

如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:

git push --force origin master

删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:

git push origin --delete master

git pull

git pull 命令用于从远程获取代码并合并本地的版本。

git pull 其实就是 git fetchgit merge FETCH_HEAD 的简写。 命令格式如下:

git pull <远程主机名> <远程分支名>:<本地分支名>

更新操作:

$ git pull
$ git pull origin

将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。

git pull origin master:brantest

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

git pull origin master

上面命令表示,取回 origin/master 分支,再与本地的 brantest 分支合并。

PS:

git的大乌龟TortoiseGit官网https://tortoisegit.org/download/

自动生成.gitignore文件的网址:http://www.gitignore.io/

posted @ 2022-03-13 12:18  DarkH  阅读(50)  评论(0编辑  收藏  举报