Git
- Git常用操作命令
- 从远程仓库克隆项目
- 分支管理
- 创建与合并
- 解决冲突
本人使用的是MacBook pro,以下操作均在MacOs系统下完成。本人使用的是码云(Gitee)作为私有仓库托管。
Git常用操作命令
安装好Git后,创建一个版本库,首先,选择一个合适的地方,创建一个空目录:
$ mkdir StudyGit
$ cd StudyGit
$ pwd
/Users/melendez/StudyGit
pwd 命令显示的是查看当前文件夹目录地址:/Users/melendez/StudyGit
第二步,使用git init
命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in /Users/melendez/StudyGit/.git/
此时版本库就建好了,当前目录下会出现一个.git的目录,这个目录是Git用来跟踪管理版本。
如果你没有看见.git目录,可使用ls -ah
命令查看
在刚刚创建的StudyGit目录下,新建一个test.txt文件,有两种方法:
1、直接在StudyGit目录下新建。
2、在终端中使用vi test.txt
命令,输入Hello World
,点击esc
后,点击control +q
,在命令行中输入wq
保存并退出。
当一个文件创建完之后,可以使用git status
命令查看结果:
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
一个文件放入仓库,需要两步:
1、使用git add
命令,将文件添加到仓库:
$ git add test.txt
2、使用git commit -m xxx
命令,将文件提交到仓库:
$ git commit -m add test.txt
[master (root-commit) 646e2a8] add
1 file changed, 2 insertions(+)
create mode 100644 test.txt
注意:-m
后面输入的是本次提交的说明,可输入任意内容,当然最好是有意义的,方便从历史记录中查找改动记录。
此时我们已经提交了一个test.txt文件,现在,我们需要改动这个文件,改成一下内容:
Hello World
I am Melendez
现在运行git status
查看结果:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
git status
命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt
被修改过了,但还没有准备提交的修改。
虽然Git告诉了我们此时的readme.txt
已经被修改了,但是若我们不知道修改了什么内容,可使用git diff
命令来查看修改内容:
$ git diff test.txt
diff --git a/test.txt b/test.txt
index 9801343..db787e2 100644
--- a/test.txt
+++ b/test.txt
@@ -1,2 +1,3 @@
Hello World
+I am Melendez
知道了修改了什么内容,再使用上述的提交命令即可。
git log
从最近到最远的提交日志:
$ git log
commit cbd84e7c1540ff46fb4b6ed6bae861aecaf5e7ea (HEAD -> master)
Author: melendez <437130542@qq.com>
Date: Sat Mar 28 16:02:51 2020 +0800
aaaa
commit 646e2a845d92c0b509eff73c3a054309fe578482
Author: melendez <437130542@qq.com>
Date: Sat Mar 28 15:38:01 2020 +0800
add
如果嫌弃内容繁杂,可在git log --pretty=oneline
命令:
% git log --pretty=oneline
cbd84e7c1540ff46fb4b6ed6bae861aecaf5e7ea (HEAD -> master) aaaa
646e2a845d92c0b509eff73c3a054309fe578482 add
若想回到之前的版本,可输入git reset --head xxxx(版本号)
即可。
从远程仓库克隆项目
学校安排本学期使用码云(Gitee)进行教学,以下均基于在Gitee上操作。
首先,登录Gitee,新建一个仓库StudyGit。
语言选择java
,添加 .gitignore 选择Maven
。
创建完成后,选择克隆/下载
,点击复制
按钮,复制Https链接。
打开终端,输入克隆命令:
$ git clone https://gitee.com/me1endez/StudyGit.git
Cloning into 'StudyGit'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 8 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (8/8), done.
查看当前目录文件:
$ ls -ah
. .git .gitignore README.md
.. .gitee README.en.md
出现以上相似内容说明克隆成功。
分支管理
创建与合并
创建并切换到feature分支,使用git checkout -b feature
命令:
$ git checkout -b feature
Switched to a new branch 'feature'
创建完成后,使用git branch
命令查看当前所在的分支:
$ git branch
* feature
master
在feature分支下创建一个test.txt文件,并提交到本地仓:
$ vi test.txt
$ git add test.txt
$ git commit -m "branch test"
[feature 62bb7d0] branch test
1 file changed, 1 insertion(+)
create mode 100644 test.txt
若需要切换其他分支,使用git checkout master
命令:
$ git checkout master
Switched to branch 'master'
切换完成后,使用git branch
命令查看当前所在的分支:
$ git branch
feature
* master
在feature分支下,创建一个test.txt文件,提交到本地仓库后,使用git merge feature
命令将feature分支与master分支进行合并:
$ git merge feature
Updating 823660b..62bb7d0
Fast-forward
test.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 test.txt
分支合并完之后,若想删除分支,使用git branch -d feature
命令:
$ git branch -d feature
Deleted branch feature (was 62bb7d0).
删除后,查看branch
,就只剩下master
分支:
git branch
* master
解决冲突
创建一个分支feature_a
,并在README.md
文件添加一句i am melendez
:
$ git checkout -b feature_a
Switched to a new branch 'feature_a'
$ vi README.md
$ git add README.md
$ git commit -m "i am melendez"
[feature_a 3ce1093] i am melendez
1 file changed, 1 insertion(+)
提交后,切换到master
分支,并在README.md
文件添加一句I am Melendez
。:
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
$ vi README.md
$ git add README.md
$ git commit -m"I am Melendez"
[master 576310d] I am Melendez
1 file changed, 2 insertions(+), 1 deletion(-)
此时,feature _a
分支和master
分支分别提交了新的README.md文件,就变成了这样:
在这种情况下,我们将feature_a
分支合并到master
分支上,就有可能出现冲突:
$ git branch
feature_a
* master
$ git merge feature_a
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
果然发生了冲突,此时使用git status
命令可以告诉我们是README.md文件发生了冲突:
$ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
解决方法:
使用cat README.md
命令查看内容:
cat README.md
Hello World!
<<<<<<< HEAD
I am Melendez
=======
i am melendez
>>>>>>> feature_a
从中,我们可以看到是大小写的不一致导致了此次的冲突,我们修改后保存:
Hello World!
I am Melendez
重新提交:
$ git add README.md
$ git commit -m"conflict fixed"
[master 1a01533] conflict fixed
此时冲突就修复完成了,我们可以使用git log --graph --pretty=oneline --abbrev-commit
来查看分支的合并情况:
$ git log --graph --pretty=oneline --abbrev-commit
* 1a01533 (HEAD -> master) conflict fixed
|\
| * 3ce1093 (feature_a) i am melendez
* | 576310d I am Melendez
|/
* 6d14291 add Hello World
* 62bb7d0 branch test
* 823660b (origin/master, origin/develop, origin/HEAD) Initial commit