git基础操作(一)

一、Git创建仓库
1. git init

​ Git使用git init命令来初始化一个Git仓库,Git的很多命令需要在Git仓库中运行,所以git init 是使用Git的第一个命令。

​ 在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

1.1 指定当前目录作为Git仓库

git init

1.2 指定目录作为Git仓库

git init newrepo

​ 初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

1.3 版本追踪

​ 如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

注: 在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "

所以在 git bash 中 git commit -m ‘提交说明’ 这样是可以的,在 Windows 命令行中就要使用双引号 git commit -m “提交说明”

2. git clone

我们使用 git clone 从现有 Git 仓库中拷贝项目。

克隆仓库的命令格式为:

git clone <repo>

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone <repo> <directory>

参数说明:

  • **repo:**Git 仓库。
  • **directory:**本地目录。

比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git

执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。

如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit
3. 配置

git 的设置使用 git config 命令。

显示当前的 git 配置信息:

$ git config --list
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true

编辑 git 配置文件:

$ git config -e    # 针对当前仓库 

或者:

$ git config -e --global   # 针对系统上所有仓库

设置提交代码时的用户信息:

$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com

如果去掉 –global 参数只对当前仓库有效。

二、Git基本操作

Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。

​ 下图展示了各区的关系以及对应的操作:

img

  • workspace:工作区
  • staging area:暂存区/缓存区,一个看不见的区域,避免提交一些错误的代码。
  • local repository:版本库或本地仓库,本地仓库就是Git在工作目录下创建的一个本地仓库(.git文件夹),这个本地仓库是一个隐藏文件。
  • remote repository:远程仓库,远程服务器上的仓库,如gitee、github。
1. 提交与修改

​ Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。

​ 下表列出了有关创建与提交你的项目的快照的命令:

命令说明
git add添加文件到暂存区
git status查看仓库当前的状态,显示有变更的文件。
git diff比较文件的不同,即暂存区和工作区的差异。
git commit提交暂存区到本地仓库。
git reset回退版本。
git rm删除工作区文件。
git mv移动或重命名工作区文件。
1.1 git add

git add 命令可将该文件添加到暂存区。

(1)添加一个或多个文件到暂存区:

git add [file1] [file2] ...

(2)添加指定目录到暂存区,包括子目录:

git add [dir]

(3)添加当前目录下的所有文件到暂存区:

git add .
1.2 git status

git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。

​ 通常我们使用 -s 参数来获得简短的输出结果:

$ git status -s
AM README
A  hello.php
1.3 git diff

​ git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

​ git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别

​ git diff 有两个主要的应用场景。

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat
1.4 git commit

​ git commit 命令将暂存区内容添加到本地仓库中。

​ 提交暂存区到本地仓库中:

git commit -m [message]

​ [message] 可以是一些备注信息。

​ 提交暂存区的指定文件到仓库区:

$ git commit [file1] [file2] ... -m [message]

-a 参数设置修改文件后不需要执行 git add 命令,直接来提交

$ git commit -a
1.5 git reset

​ git reset 命令用于回退版本,可以指定退回某一次提交的版本。

​ git reset 命令语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

–mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。

git reset  [HEAD] 
2. 提交日志
命令说明
git log查看历史提交记录
git blame <file>以列表形式查看指定文件的历史修改记录
3. 远程操作
命令说明
git remote远程仓库操作
git fetch从远程获取代码库
git pull下载远程代码并合并
git push上传远程代码并合并
3.1 git remote

git remote 命令用于在远程仓库的操作。

​ 显示所有远程仓库:

git remote -v

​ 显示某个远程仓库的信息:

git remote show [remote]

​ 添加远程版本库:

git remote add [shortname] [url]
3.2 git fetch

git fetch 命令用于从远程获取代码库。

​ (1)该命令执行完后需要执行 git merge 远程分支到你所在的分支。

​ 从远端仓库提取数据并尝试合并到当前分支:

git merge

该命令就是在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支。

​ (2)假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行:

git fetch [alias]

​ 以上命令告诉 Git 去获取它有你没有的数据,然后你可以执行:

git merge [alias]/[branch]

以上命令将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。

3.3 git pull

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

​ (1)git pull 其实就是 git fetchgit merge FETCH_HEAD 的简写。

​ 命令格式如下:

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

(2)实例

​ 更新操作:

$ git pull
$ git pull origin

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

git pull origin master:brantest

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

git pull origin master

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

3.4 git push

git push 命用于从将本地的分支版本上传到远程并合并。

​ 命令格式如下:

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

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

git push <远程主机名> <本地分支名>
三、分支管理

​ 几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。

​ 使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

​ Git分支实际上是指向更改快照的指针。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qo3lNg0c-1654442122348)(https://static.runoob.com/images/svg/git-brance.svg)]

1. 创建分支命令:
git branch (branchname)
2. 切换分支命令:
git checkout (branchname)

​ 当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

3. 合并分支命令:
git merge 
4. 列出分支

​ 列出分支基本命令:

git branch

​ 没有参数时,git branch 会列出你在本地的分支。

$ git branch
* master

​ 此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。

​ 当你执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。

​ 如果我们要手动创建一个分支。执行 git branch (branchname) 即可。

$ git branch testing
$ git branch
* master
  testing

​ 现在我们可以看到,有了一个新分支 testing

​ 当你以此方式在上次提交更新之后创建了新分支,如果后来又有更新提交, 然后又切换到了 testing 分支,Git 将还原你的工作目录到你创建分支时候的样子。

​ 接下来我们将演示如何切换分支,我们用 git checkout (branch) 切换到我们要修改的分支。下面示例中,在master分支下创建test.txt文件,切换到testing分支时无法查看该文件,只有在master分支下才能看到该文件。

$ ls
README
$ echo 'runoob.com' > test.txt
$ git add .
$ git commit -m 'add test.txt'
[master 3e92c19] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
$ ls
README        test.txt
$ git checkout testing
Switched to branch 'testing'
$ ls
README

​ 当我们切换到 testing 分支的时候,我们添加的新文件 test.txt 被移除了。切换回 master 分支的时候,它们又重新出现了。

$ git checkout master
Switched to branch 'master'
$ ls
README        test.txt

​ 我们也可以使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作。

$ git checkout -b newtest
Switched to a new branch 'newtest'
$ git rm test.txt 
rm 'test.txt'
$ ls
README
$ touch runoob.php
$ git add .
$ git commit -am 'removed test.txt、add runoob.php'
[newtest c1501a2] removed test.txt、add runoob.php
 2 files changed, 1 deletion(-)
 create mode 100644 runoob.php
 delete mode 100644 test.txt
$ ls
README        runoob.php
$ git checkout master
Switched to branch 'master'
$ ls
README        test.txt

​ 以上的示例中,创建了一个分支,在该分支上移除了一些文件 test.txt,并添加了 runoob.php 文件,然后切换回我们的主分支,删除的 test.txt 文件又回来了,且新增加的 runoob.php 不存在主分支中。

​ 使用分支将工作切分开来,从而让我们能够在不同开发环境中做事,并来回切换。

5. 删除分支

​ 删除分支命令:

git branch -d (branchname)

​ 例如我们要删除 testing 分支:

$ git branch
* master
  testing
$ git branch -d testing
Deleted branch testing (was 85fc7e7).
$ git branch
* master
6. 分支合并

​ 一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用以下命令将任何分支合并到当前分支中去:

git merge
$ git branch
* master
  newtest
$ ls
README        test.txt
$ git merge newtest
Updating 3e92c19..c1501a2
Fast-forward
 runoob.php | 0
 test.txt   | 1 -
 2 files changed, 1 deletion(-)
 create mode 100644 runoob.php
 delete mode 100644 test.txt
$ ls
README        runoob.php

​ 以上实例中我们将 newtest 分支合并到主分支去,test.txt 文件被删除。

​ 合并完后就可以删除分支:

$ git branch -d newtest
Deleted branch newtest (was c1501a2).

​ 删除后, 就只剩下 master 分支了:

$ git branch
* master
7.合并冲突

​ 合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。

ter
newtest
$ ls
README test.txt
$ git merge newtest
Updating 3e92c19…c1501a2
Fast-forward
runoob.php | 0
test.txt | 1 -
2 files changed, 1 deletion(-)
create mode 100644 runoob.php
delete mode 100644 test.txt
$ ls
README runoob.php


​	以上实例中我们将 newtest 分支合并到主分支去,test.txt 文件被删除。

​	合并完后就可以删除分支:

$ git branch -d newtest
Deleted branch newtest (was c1501a2).


​	删除后, 就只剩下 master 分支了:

$ git branch

  • master



##### 7.合并冲突

​	合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。

​	冲突出现的原因是合并时,不同分支的同一文件出现差异,需要做手动修改,并用`git add`告诉 Git 文件冲突已经解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值