Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
入门
使用Git前,需要先建立一个仓库(repository)。您可以使用一个已经存在的目录作为Git仓库或创建一个空目录。
使用您当前目录作为Git仓库,我们只需使它初始化。
git init
使用我们指定目录作为Git仓库。
git init newrepo
从现在开始,我们将假设您在Git仓库根目录下,除非另有说明。
我们有一个仓库,但什么也没有,可以使用add命令添加文件。
git add filename
可以使用add... 继续添加任务文件。
现在我们已经添加了这些文件,我们希望它们能够真正被保存在Git仓库。
为此,我们将它们提交到仓库。
git commit -m "Adding files"
如果您不使用-m,会出现编辑器来让你写自己的注释信息。
当我们修改了很多文件,而不想每一个都add,想commit自动来提交本地修改,我们可以使用-a标识。
git commit -a -m "Changed some files"
git commit 命令的-a选项可将所有被修改或者已删除的且已经被git管理的文档提交到仓库中。
千万注意,-a不会造成新文件被提交,只能修改。
我们先从服务器克隆一个库并上传。
git clone ssh://example.com/~/www/project.git
现在我们修改之后可以进行推送到服务器。
git push ssh://example.com/~/www/project.git
如果您已经按上面的进行push,下面命令表示,当前分支自动与唯一一个追踪分支进行合并。
git pull
从非默认位置更新到指定的url。
git pull http://git.example.com/project.git
如何你想从资源库中删除文件,我们使用rm。
git rm file
分支在本地完成,速度快。要创建一个新的分支,我们使用branch命令。
git branch test
branch命令不会将我们带入分支,只是创建一个新分支。所以我们使用checkout命令来更改分支。
git checkout test
第一个分支,或主分支,被称为"master"。
git checkout master
对其他分支的更改不会反映在主分支上。如果想将更改提交到主分支,则需切换回master分支,然后使用合并。
git checkout master
git merge test
如果您想删除分支,我们使用-d标识。
git branch -d test
Git 的工作流程
一般工作流程如下:
1、克隆 Git 资源作为工作目录。
2、在克隆的资源上添加或修改文件。
3、如果其他人修改了,你可以更新资源。
4、在提交前查看修改。
5、提交修改。
在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
Git 工作区、暂存区和版本库概念
工作区:就是你在电脑里能看到的目录。
暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),
标记为 "master" 的是 master 分支所代表的目录树。
1、初始化一个git仓库
git init //该命令执行完后在当前目录生成一个.git目录
git init newrepo //指定目录作为git仓库,在newrepo目录下出现一个名为.git的目录
git add *.c
git add README
git commit -m"初始化项目版本” //将目录下以.c结尾及README文件提交到仓库中
2、克隆仓库
git clone //克隆仓库
git clone <repo> <directory> //克隆到指定目录
git clone git://github.com/schacon/grit.git //克隆ruby语言的git代码仓库grit
git clone git://github.com/schacon/grit.git mygrit //新建项目目录
3、获取与创建项目命令
git init
mkdir runoob //创建runoob项目
cd runoob/
git init //在 /www/runoob/.git/ 目录初始化空 Git 仓库完毕
ls -a
git clone
git clone git@github.com:schacon/simplegit.git //克隆github上的项目
cd simplest/ //在当前目录下生成一个simplegit目录
ls
ls -a
cd .git
4、基本快照
git add
touch README //添加文件README
touch hello.php //添加文件hello.php
ls
git status -s //查看项目的当前状态
git add README hello.php //添加文件
git status //查看上次提交之后是否有修改
git diff
执行 git diff 来查看执行 git status 的结果的详细信息.
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景.
尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat
git add hello.php
git status -s
git diff —cached
git commit
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址。
git config --global user.name ‘runoob’ //名字
git config —-global user.email test@runoob.com //电子邮箱
git add hello.php
git status -s
git commit -m"第一次版本提交”
Git status
git rm
git rm hello.php //删除文件
ls
git mv
git add README
git mv README README.md //重命名
ls
5、git分支管理
git branch //创建分支
git checkout //切换分支
git merge //合并分支
mkdir gitdemo
cd gitdemo/
git init
touch README
git add README
git commit -m"第一次版本提交”
git branch //列出分支
ls
git add .
git commit -m”add test.txt”
ls
git checkout testing
ls
git checkout master
ls
git checkout -b newest
git rm test.txt
ls
touch hello.php
git add .
git commit -am"remove test.txt add runoob.php”
git checkout master
git branch
git branch -d testing //删除分支
git branch
git merge newest //合并分支
git checkout -b change_site //创建change_site分支
git commit -am”change the runoob.php"
git checkout master
cat runoob.php
vim runoob.php
cat runoob.php
git merge change_site
cat runoob.php
vim runoob.php
cat runoob.php
git diff
git status -s
git add runoob.php
git status -s
git commit
6、git查看提交历史
git log //列出历史提交记录
7、git标签
git tag -a v1.0 //给最新一次提交打上(HEAD)"v1.0"的标签。-a 选项意为"创建一个带注解的标签”
git tag
git tag -a <tagname> -m"runoob.com标签"
创建分支命令:
git branch (branchname)
切换分支命令:
git checkout (branchname)
合并分支命令:
git merge
你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。
开始前我们先创建一个测试目录:
$ mkdir gitdemo
$ cd gitdemo/
$ git init
Initialized empty Git repository...
$ touch README
$ git add README
$ git commit -m '第一次版本提交'
[master (root-commit) 3b58100] 第一次版本提交
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README
列出分支基本命令:
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) 切换到我们要修改的分支。
$ 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 hello.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 不存在主分支中。
使用分支将工作切分开来,从而让我们能够在不同开发环境中做事,并来回切换。
删除分支命令:
git branch -d (branchname)
例如我们要删除 testing 分支:
$ git branch
* master
testing
$ git branch -d testing
Deleted branch testing (was 85fc7e7).
$ git branch
* master
一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用以下命令将任何分支合并到当前分支中去:
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
合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。
$ git branch
* master
$ cat runoob.php
首先,我们创建一个叫做 change_site 的分支,切换过去,我们将 runoob.php 内容改为:
<?php
echo 'runoob';
?>
创建 change_site 分支:
$ git checkout -b change_site
Switched to a new branch 'change_site'
$ vim runoob.php
$ head -3 runoob.php
<?php
echo 'runoob';
?>
$ git commit -am 'changed the runoob.php'
[change_site 7774248] changed the runoob.php
1 file changed, 3 insertions(+)
将修改的内容提交到 change_site 分支中。 现在,假如切换回 master 分支我们可以看内容恢复到我们修改前的(空文件,没有代码),我们再次修改 runoob.php 文件。
$ git checkout master
Switched to branch 'master'
$ cat runoob.php
$ vim runoob.php # 修改内容如下
$ cat runoob.php
<?php
echo 1;
?>
$ git diff
diff --git a/runoob.php b/runoob.php
index e69de29..ac60739 100644
--- a/runoob.php
+++ b/runoob.php
@@ -0,0 +1,3 @@
+<?php
+echo 1;
+?>
$ git commit -am '修改代码'
[master c68142b] 修改代码
1 file changed, 3 insertions(+)
现在这些改变已经记录到我的 "master" 分支了。接下来我们将 "change_site" 分支合并过来。
$ git merge change_site
Auto-merging runoob.php
CONFLICT (content): Merge conflict in runoob.php
Automatic merge failed; fix conflicts and then commit the result.
$ cat runoob.php # 代开文件,看到冲突内容
<?php
<<<<<<< HEAD
echo 1;
=======
echo 'runoob';
>>>>>>> change_site
?>
我们将前一个分支合并到 master 分支,一个合并冲突就出现了,接下来我们需要手动去修改它。
$ vim runoob.php
$ cat runoob.php
<?php
echo 1;
echo 'runoob';
?>
$ git diff
diff --cc runoob.php
index ac60739,b63d7d7..0000000
--- a/runoob.php
+++ b/runoob.php
@@@ -1,3 -1,3 +1,4 @@@
<?php
+echo 1;
+ echo 'runoob';
?>
在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决
$ git status -s
UU runoob.php
$ git add runoob.php
$ git status -s
M runoob.php
$ git commit
[master 88afe0e] Merge branch 'change_site'
现在我们成功解决了合并中的冲突,并提交了结果。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_43842093/article/details/122897226
内容来源于网络,如有侵权,请联系作者删除!