GIT

windows:

git将每个版本都独立保存

1.配置,在命令行模式下输入以下命令:

git config --global user.name "用户名"

git config --global user.email "邮箱"

查看是否配置成功:

git config --list

2.git三棵树

工作区域、暂存区域、Git仓库

工作区域:工作目录

暂存区域:存放改动的内容,是一个文件

Git仓库:安全存放所有版本的数据,head指针指向最新版本的内容

3.Git工作流程

  • 在工作目录中添加、修改文件
  • 将需要进行版本管理的文件放入暂存区域
  • 将暂存区域的文件提交到Git仓库

Git管理文件的三种状态:已修改(modified)、已暂存(staged)、已提交(commited)

4.windows下实战

  • 建立project文件夹

  命令行中在该文件下输入git init命令,多出.git隐藏文件夹,是git用来管理版本迭代的文件夹

  • 创建README文档,命令:git add READ.md  将文件添加到暂存区域
  • 提交:git commit -m "add a readme file" ,将暂存区域文件提交到Git仓库 ,引号中为添加的说明(-am :add+commit)

5.查看状态 ,git status

正常时返回:

On branch master

nothing to commit, working tree clean

创建文件但未加入到暂存区域:

On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)

Lisence

nothing added to commit but untracked files present (use "git add" to track)

加入到暂存区:(使用git reset HEAD命令可以撤销)

On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: Lisence

如果修改了某个文件的内容,则提示:

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: Lisence

no changes added to commit (use "git add" and/or "git commit -a")

 

如果使用git checkout -- Lisence,则手动修改的部分被旧的内容覆盖(具有威胁的命令)

如果修改了暂存区的内容,此时会存在两个版本的文件,如果使用git add命令,则将修改后的文件放入暂存区,如果使用git commit命令,则将原文件提交:

D:\project>git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

modified: Lisence

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: Lisence

6.查看历史提交命令 git log

按时间从近到远

D:\project>git log
commit 16bd977fee4c7f35d6da675b5dc47e5c2413bafd (HEAD -> master)   (校验和)
Author: dlutjwh <18742027136@163.com>
Date: Tue Jul 2 08:57:52 2019 +0800

change Lisence

commit cbc2fadde3ae1170da493e97b6c2f1587ee0a490
Author: dlutjwh <18742027136@163.com>
Date: Tue Jul 2 08:37:33 2019 +0800

add a lisence file

commit c058db1e856ca72af427c63aeaec24b8291b0e55
Author: dlutjwh <18742027136@163.com>
Date: Mon Jul 1 17:43:34 2019 +0800

add a readme file

7.reset命令

 之前的例子可视化

回到上一层:

git reset HEAD~ 波浪线表示回到上一层,两个波浪线表示前两层。。。或者git reset HEAD~2

git reset --mixed(默认) HEAD~:

  • 移动HEAD的指向,将其指向上一个快照
  • 将HEAD移动后指向的快照回滚到暂存区域

git reset --soft HEAD~:(commit之后后悔了,回来重新提交)

  • 移动HEAD的指向,将其指向上一个快照

 git reset --hard HEAD~:

  • 移动HEAD的指向,将其指向上一个快照 
  • 将HEAD移动后指向的快照回滚到暂存区域(第二棵树)
  • 将暂存区域的文件还原到工作目录(第一棵树)

 

 soft暂存区和工作区都是当前版本的内容,mix暂存区的内容是前一个版本,工作区是现在的,要回到现在状态,必须先add在commit

回到指定快照:

git reset 哈希字符(前几个字符)

回滚个别文件:

git reset 版本快照 文件名/路径  忽略HEAD指针移动这一步

往前滚:

git reset 版本快照ID

git reflog:查看所有历史ID

8.git diff 

比较工作空间与暂存空间文件区别

D:\MyProject2>git diff
diff --git a/README.md b/README.md
index 0f2c569..b9cb571 100644   //文件id以及文件类型和权限
--- a/README.md   //---表示旧文件,存放在暂存区域
+++ b/README.md   //+++表示新文件,放在工作目录
@@ -1 +1,2 @@     //-表示旧文件,+表示新文件 数字表示开始行号 逗号后的数字表示共多少行
-<EF><BB><BF><E8><AF><BE><E5><90><8E><E4><BD><9C><E4><B8><9A><EF><BC><9A><E6><96><87><E5><AD><97><E6><B8><B8><E6><88>
<8F>  //减号表示减少的内容
\ No newline at end of file   //以上为共同内容
+<EF><BB><BF><E9>B6><E5><9F><BA><E7><A1><80><E5><85><A5><E9><97><A8>
+<E8><AF><BE><E5><90><8E><E4><BD><9C><E4><B8><9A><EF><BC><9A><E6><96><87><E5><AD><97><E6><B8><B8><E6><88><8F>
\ No newline at end of file //以上为旧文件独有内容
diff --git a/game.py b/game.py
index f1f47c4..6f67a73 100644
--- a/game.py
+++ b/game.py
@@ -4,5 +4,5 @@
using namespace std;

int main(){
-
+ fasdjlfaklgj
}
\ No newline at end of file  //共同内容
//旧文件无独有内容

 

如果内容太多z向下移动,k向上移动,f一页一页移,b页下移(同vim)

搜索: /+关键词 从上向下搜 

9.比较多个id

git diff  快照ID1,快照ID2

10.比较当前工作目录与Git仓库中的快照

git diff 快照id

git diff HEAD (当前最新快照)

11.比较暂存区域和Git仓库快照

git  diff --cached

12.指定快照与暂存区域

git  diff --cached 快照ID

13.修改最后一次提交

git commit --amend 进入提交说明界面进行编辑

中文字符:git commit --amend -m "中文"

14.手动删除后恢复

git checkout -- README

15.删除文件

git rm data.txt 未完全删除

git reset  --soft HEAD~ 回到过去

git rm 命令只删除工作目录和暂存区域的文件,即取消跟踪,在下次提交时不纳入版本管理

git rm -f *** 暴力删除,既删除暂存区,也删除工作目录

git rm --cached 文件名 只删除暂存区的文件

16.重命名文件

 git 原文件名 新文件名

17.Git分支  git branch 分支名

git branch -b 分支名 :创建并切换

D:\MyProject2>git branch feature

D:\MyProject2>git log --decorate //decorate显示所有分支和标签

commit 083497934e5c3822d3cb3ee974447e379c275d11 (HEAD -> master, feature)

Author: dlutjwh <18742027136@163.com>

Date: Tue Jul 2 23:32:55 2019 +0800

second 2

commit 42f2acd5401734f4b68fc7b9a46c40c3e3766a58

Author: dlutjwh <18742027136@163.com>

Date: Tue Jul 2 22:50:02 2019 +0800

word game - guess number

master为默认分支

切换分支:git chekout 分支名

D:\MyProject2>git log --decorate --oneline  //只显示一行

0834979 (HEAD -> feature, master) second 2

42f2acd word game - guess number

git log --decorate oneline --graph --all 查看所有分支log

18.分支的合并 

git merge feature

可能会产生冲突,主要是相同的文件名

19.删除分支

git branch -d 分支名

20.匿名分支

 

posted @ 2022-04-30 18:09  dlutjwh  阅读(51)  评论(0编辑  收藏  举报