Git常用命令总结
一、Git的简介
Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合github来使用。
二、Git的工作流程
1.Git的工作流程
-
克隆Git资源作为工作目录
-
在克隆的资源上添加或修改文件
-
如果其他人修改了,你可以更新资源
-
在提交前查看修改
-
提交修改
-
在修改完成后,如果发现错误,可以撤回提交并再次修改并提交
2.下图展示了Git的工作流程:
三、Git的常用命令
1.使用当前目录作为Git仓库,我们只需要使它初始化。
git init
2.使用我们指定的目录作为Git仓库
git init newrepo
3.将文件提交到仓库中
# 以下命令将目录下以.c结尾及README文件提交到仓库中
$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'
4.克隆仓库
git clone
例如:$ git clone git://github.com/schacon/grit.git
- 克隆仓库到指定目录
git clone
例如:$ git clone git://github.com/schacon/grit.git mygrit
- git的设置命令
# 显示当前的git配置信息
$ git config --list
# 针对当前仓库编辑 git 配置文件
$ git config -e
# 针对系统上的所有仓库编辑 git 配置文件
$ git config -e --global
# 设置提交代码时的用户
# 如果去掉 --global参数只对当前仓库有效
$ git config --global user.name "用户名"
$ git config --global user.email 邮箱地址
- git的提交与修改命令
# 添加文件到仓库
$ git add
# 查看仓库当前的状态,显示有变更的文件
$ git status
# 比较文件的不同,即暂存区和工作区的差异
$ git diff
# 提交暂存区到本地仓库
$ git commit
# 回退版本
$ git reset
# 删除工作区文件
$ git rm
# 移动或重命名工作区文件
$ git mv
- 提交日志
# 查看历史提交记录
$ git log
# 以列表形式查看指定文件的历史修改记录
$ git blame <file>
- 远程操作
# 远程仓库操作
$ git remote
# 从远程获取代码库
$ git fetch
# 下载远程代码并合并
$ git pull
# 上传远程代码并合并
$ git push
- git分支管理
# 创建分支命令
$ git branch (branchname)
# 切换分支命令
# 当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。
$ git checkout (branchname)
# 合并分支命令
$ git merge
* master
# 这个例子的意思时,我们有一个分支叫做master,默认情况下Git就会为你创建master分支。
# 列出分支命令
$ git branch
# 切换分支
$ git branch testing
$ git checkout testing
# 这个例子的意思时创建了一个testing分支,并且切换到这个分支。
# 删除分支
$ git branch -d (branchname)
# 实例:将其他分支合并到当前分支中去,并且合并完之后删除
$ 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
$ git branch -d newtest
Deleted branch newtest (was c1501a2).
11.分支合并冲突
# 合并并不仅仅是简单的文件添加、移除的操作,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'