git的安装
官网: git-scm.com/
git安装
csharp
[root@vm1 ~]# yum install git
[root@vm1 ~]# git --versiongit version 1.8.3.1
查看参数帮助
csharp
查看参数帮助
[root@vm1 ~]# git --help
git的操作可以说只需要git一条命令加参数即可
git应用
git身份设置
因为git是分布式版本控制系统,不同的人提交代码需要区分,所以每个人都要设置一个身份标识。如果不设置的话谁会知道你这个开发者是张三,李四,还是王五呢?
ini
[root@vm1 ~]# git config --global user.name "daniel"
[root@vm1 ~]# git config --global user.email "daniel@itcast.cn"
[root@vm1 ~]# git config --global color.ui true
[root@vm1 ~]# git config --list
user.name=daniel
user.email=daniel@itcast.cn
color.ui=true
暂存区
==暂存区==(stage或index): 也有叫**==缓存区==**
暂存区就看作是一个缓区区域,临时保存你的改动。
如果在工作目录创建了一个新文件,需要将新文件添加到暂存区。
添加文件到暂存区
1, 准备一个文件
perl
[root@vm1 GitTest]# cat 1.py
print("hello world")
2, 使用git add命令提交到暂存区(逆向操作为git rm --cached 1.py)
csharp
[root@vm1 GitTest]# git add 1.py
3, 提交第一个文件后,版本库.git子目录里就多了一个index
perl
[root@vm1 GitTest]# ls .git/
branches config description HEAD hooks index info objects refs
4, 使用strings命令查看可以看到git add的文件列表
perl
[root@vm2 GitTest]# strings .git/index
DIRC
1.py 这里可以看到1.py文件添加到了index文件里了
git版本控制
提交文件(第1个版本)
代码文件需要**==commit==**提交后才能纳入版本控制。
1, 可以使用git status查看工作目录里有哪些文件需要提交
csharp
[root@vm1 GitTest]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: 1.py
#
2, 使用git commit提交; -m 后接提交的说明信息
sql
[root@vm1 GitTest]# git commit -m "提交1.py"
[master (root-commit) 4e67190] 提交1.py
1 file changed, 1 insertion(+)
create mode 100644 1.py
3, 再次git status查看状态,没有需要提交的文件了
csharp
[root@vm1 GitTest]# git status
# On branch master
nothing to commit, working directory clean
修改再提交(第2个版本)
1, 修改1.py文件,我这里加了一句print("hello python")
perl
[root@vm1 GitTest]# cat 1.py
print("hello world")
print("hello python")
2, 使用git status查看,信息告诉我们1.py被修改了
perl
[root@vm1 GitTest]# git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: 1.py
#
no changes added to commit (use "git add" and/or "git commit -a")
3, 使用git diff查看修改了什么
perl
[root@vm1 GitTest]# git diff 1.py
diff --git a/1.py b/1.py
index 8cde782..5da7641 100644
--- a/1.py
+++ b/1.py
@@ -1 +1,2 @@
print("hello world")
+print("hello python")
[root@vm1 GitTest]# git add 1.py
[root@vm1 GitTest]# git commit -m "添加了一行代码打印hello python"
[master 0e9371b] 添加了一行代码打印hello python
1 file changed, 1 insertion(+)
再修改再提交(第3个版本)
perl
再增加一句代码print("hello linux")
[root@vm1 GitTest]# cat 1.py
print("hello world")
print("hello python")
print("hello linux")
[root@vm1 GitTest]# git add 1.py
[root@vm1 GitTest]# git commit -m "添加了一行代码打印hello linux"
[master b679b01] 添加了一行代码打印hello linux
1 file changed, 1 insertion(+)
小结:
-
工作目录中写好的代码文件需要先
git add 文件名添加到暂存区,再git commit 文件名提交。以后每次修改都要重复前两步。 -
git status查看工作目录中的状态 -
git diff 文件名查看文件修改了什么
查看提交历史
1, 使用git log查看提交的历史版本信息
sql
[root@vm1 GitTest]# git log
commit b679b01f2ee42c1c4a7e14ed5d37e02da131a98e
Author: daniel <daniel@itcast.cn>
Date: Wed Jan 16 14:00:44 2019 +0800
添加了一行代码打印hello linux
commit 0e9371bfdbc27049c31017773248ae8333b5bf3f
Author: daniel <daniel@itcast.cn>
Date: Tue Jan 15 23:43:58 2019 +0800
添加了一行代码打印hello python
commit 4e67190ec3c57f1708702c9eca5aebe88017bdd2
Author: daniel <daniel@itcast.cn>
Date: Tue Jan 15 23:23:26 2019 +0800
提交1.py
2, 使用git log --pretty=oneline查看提交的历史版本信息, 查看的显示信息更简洁。
前面字符串你可以看作就是一个版本号(commit id)。
csharp
[root@vm1 GitTest]# git log --pretty=oneline
b679b01f2ee42c1c4a7e14ed5d37e02da131a98e 添加了一行代码打印hello linux
0e9371bfdbc27049c31017773248ae8333b5bf3f 添加了一行代码打印hello python
4e67190ec3c57f1708702c9eca5aebe88017bdd2 提交1.py
版本回退与还原
1, 使用git reset --hard HEAD^回退到上一个版本(也就是第2个版本)
perl
[root@vm1 GitTest]# git reset --hard HEAD^
HEAD is now at 0e9371b 添加了一行代码打印hello python
[root@vm1 GitTest]# cat 1.py
print("hello world")
print("hello python")
2, 使用git reset --hard 第3个版本号 还原到第3个版本。
但如果我忘了第3个版本号是什么了,使用git reflog查看所有的操作历史。
perl
[root@vm1 GitTest]# git reflog
0e9371b HEAD@{0}: reset: moving to HEAD^
b679b01 HEAD@{1}: commit: 添加了一行代码打印hello linux
0e9371b HEAD@{2}: commit: 添加了一行代码打印hello python
4e67190 HEAD@{3}: commit (initial): 提交1.py
3, 还原到第3个版本
perl
[root@vm1 GitTest]# git reset --hard b679b01
HEAD is now at b679b01 添加了一行代码打印hello linux
[root@vm1 GitTest]# cat 1.py
print("hello world")
print("hello python")
print("hello linux")
4, 回退到上上 一个版本, 也就是回退两个版本,使用git reset --hard HEAD^^
回退三个版本,使用git reset --hard HEAD^^^, 以此类推。
如果回退100个版本,那用100个^符号不方便,可以换成git reset --hard HEAD~100
csharp
[root@vm1 GitTest]# git reset --hard HEAD^^
HEAD is now at 4e67190 提交1.py
[root@vm1 GitTest]# cat 1.py
print("hello world")
小结:
-
提交后的代码文件,使用
git log查看当前版本及以前的历史版本。 -
使用
git reset --hard HEAD^或者git reset --hard HEAD~100实现版本回退。 -
使用
git reflog查看提交的所有操作及版本号 -
使用
git reset --hard 版本号你可以自由的在不同版本之间来回切换。
git工作流再次理解与应用拓展
-
工作目录里任何修改或增加的文件,都要git add到暂存区,让暂存区和工作目录的状态一致,这样才能提交一个版本。
-
git commit提交的是在暂存区里的所有文件状态。==也就是说是整个工作目录里的状态保存为一个版本,而不是某一个文件==。
-
git版本控制不仅仅是用于项目开发,你也可以用于一个软件包仓库的版本控制。
撤销修改
如果开发者状态不好,今天写的代码一团乱,想吃后悔药,git也提供了撤销的方法。
1, 准备一行或一段写错的代码
perl
[root@vm1 GitTest]# cat 1.py
print("hello world")
print("hello python")
print("hello linux")
print("hey,xxx is a gay") 这是写错的代码,需要反悔
想要撤销修改有以下方法:
-
直接把写错的代码删除就好, 但如果改变的代码很多,开发者自己都忘了具体改了哪些代码,这种做法就不方便了
-
使用
git checkout -- 文件名就可以直接撤销修改了 -
如果写乱了代码,添加暂存区但还没有commit提交。使用
git reset HEAD 文件名取消暂存区添加,再git checkout -- 文件名来撤销修改 -
如果写乱了代码,添加暂存区并提交了。则使用版本回退
误删恢复
1, 只要文件git add到了暂存区, 无论有没有git commit提交。误删除后都可以使用 git checkout -- 文件名来恢复。
csharp
[root@vm1 GitTest]# touch 2.py
[root@vm1 GitTest]# git add 2.py
[root@vm1 GitTest]# rm 2.py -rf
[root@vm1 GitTest]# ls
1.py
[root@vm1 GitTest]# git checkout -- 2.py
[root@vm1 GitTest]# ls
1.py 2.py
2, 如果文件没有git add到暂存区, 误删除了就没了。
csharp
[root@vm1 GitTest]# touch 3.py
[root@vm1 GitTest]# rm 3.py -rf
下面命令恢复报错
[root@vm1 GitTest]# git checkout -- 3.py
error: pathspec '2.py' did not match any file(s) known to git.
文件删除
1, 没有git add到暂存区的文件直接rm删除就ok
2, git add添加到暂存区,但没有git commit提交的文件。需要rm删除本地,还要git rm 文件名删除
csharp
[root@vm1 GitTest]# touch 3.py
[root@vm1 GitTest]# git add 3.py
[root@vm1 GitTest]# rm 3.py -rf
[root@vm1 GitTest]# git rm 3.py
rm '3.py'
3, git add添加到暂存区,并且已经git commit提交的文件。需要rm删除本地,再git rm 文件名删除,最后再提交删除
scss
[root@vm1 GitTest]# touch 3.py
[root@vm1 GitTest]# git add 3.py
[root@vm1 GitTest]# git commit -m "提交了3.py"
[master 0236aef] 提交了3.py
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 3.py
[root@vm1 GitTest]# rm 3.py -rf
[root@vm1 GitTest]# git rm 3.py
rm '3.py'
[root@vm1 GitTest]# git commit -m "删除了3.py"
[master dc4ee5e] 删除了3.py
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 3.py
Git 分支管理
核心目标:隔离开发、避免冲突,开发完成后合并主分支。
1. 查看分支
git branch
- 带
*的是当前分支,默认只有master(或main)。
2. 创建分支
bash
git branch 分支名 # 例:git branch dev(创建开发分支)
3. 切换分支
bash
git checkout 分支名 # 例:git checkout dev
# 快捷创建+切换(推荐)
git checkout -b 分支名 # 例:git checkout -b dev
4. 合并分支(主分支合并开发分支)
-
先切回主分支:
git checkout master # 或 main
-
合并目标分支(如 dev):
git merge dev
5. 删除分支(开发完成后)
bash
git branch -d 分支名 # 例:git branch -d dev
- 注意:不能删除当前所在分支。