git学习笔记

Git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目

Git与SVN的区别:

  1. Git是分布式的,SVN不是
  2. Git把内容按元数据方式存储,SVN是按文件
  3. Git分支和SVN的分支不同
  4. Git没有一个全局的版本号
  5. Git内容完整性要优于SVN

第一个示例

安装git之后打开git bash,然后设置信息

git config --global user.name "lpzju"
git config --global user.email "liupeng.hust@foxmail.com"

全局化

git config --global

工作目录

pwd显示当前工作目录,ls查看文件

仓库

使用mkdir创建工作目录,使用git init将目录变成Git可以管理的仓库

添加

创建文件readme.txt,内容如下:

Git is a version control system.
Git is free software.

然后使用git add 文件名把文件添加到仓库,然后

git commit -m "wrote a readme file"

会出现如下内容

[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

嗯,按照廖雪峰教程,这里确实是1个文件改动,2行内容插入

git add和git commit分开,git commit接自己注释内容

小结

  • 首先创建文件夹(目录),使用mkdir
  • 然后初始化将此目录变为仓库,使用git init
  • 然后自己创建文件,进行数据输入等
  • 再使用添加和提交,git add和git commit

修改

现在把readme.txt的内容修改如下:

Git is a distributed version control system.
Git is free software.

查看结果

然后保存,并使用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:   readme.txt

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

结果如下:

diff --git a/readme.txt b/readme.txt
index d8036c1..013b5bc 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.
\ No newline at end of file

再次添加

git add readme.txt

如果遇到git报如下问题:

warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory

我是用vim进行编辑,系统是windows,但是gitbash是linux命令,然后上面的意思是linux中换行是LF,但是windows换行是CRLF,下面用python输出一下

print("1"+"\r"+"2"+"\n"+"3"+"\r\n"+"4")

"""
2
3
4
"""

\r换行到行首,\r\n才是到下一行行首

再次查看

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt

再次提交

git commit -m "add distributed"
[master eb6bd24] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)

又双叒叕查看

git status
On branch master
nothing to commit, working tree clean

小结

  • 使用git status查看工作状态,可以看到文件是否修改
  • 然后添加、提交、查看,和前面内容相同

版本回退

对文本再次修改

将readme.txt的内容改成如下:

Git is a distributed version control system.
Git is free software distributed under the GPL.

然后add、commit,这时我们想回到之前的版本,可以先查看日志

git log

这时会出来这个仓库的日志

Author: lpzju <liupeng.hust@foxmail.com>
Date:   Sat Jan 15 16:37:02 2022 +0800

    append GPL

commit eb6bd24bec09dc4b9cc7f9ac9c686f59008503d2
Author: lpzju <liupeng.hust@foxmail.com>
Date:   Sat Jan 15 16:28:33 2022 +0800

    add distributed

commit de7b3d7f5609bac09185540a5ad45b59d870d3dd
Author: lpzju <liupeng.hust@foxmail.com>
Date:   Sat Jan 15 16:02:56 2022 +0800

    wrote a readme file

能很清楚的看到做出的修改

回退

当前版本用HEAD表示,往前则使用HEAD~n,n表示前多少,那么回退则使用git reset --hard HEAD~n

git reset --hard HEAD~1

这样就会回退1个版本

查看文件

Linux系统下,查看文件使用cat命令(因为是在git bash下,所以可以使用linux命令)

cat readme.txt
Git is a distributed version control system.
Git is free software.

windows下,使用type查看文件

再次回退

现在已经从第三个版本回退到了第二个版本,那么是没有第三个版本的信息了,但如果这时候我们还想再去到第三个版本,那么要使用他的id号

git log --pretty=oneline
eb6bd24bec09dc4b9cc7f9ac9c686f59008503d2 (HEAD -> master) add distributed
de7b3d7f5609bac09185540a5ad45b59d870d3dd wrote a readme file

此时可以使用id号前几位即可回退

git reset --hard de7b

终极回退

上面的回退,是要找到id,但如果现在已经回退了,并且没有后面版本的id,那么需要使用如下命令:

git reflog
eb6bd24 (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
3b4f5e8 HEAD@{1}: commit: append GPL
eb6bd24 (HEAD -> master) HEAD@{2}: commit: add distributed
de7b3d7 HEAD@{3}: commit (initial): wrote a readme file

Git回退示意图

┌────┐
│HEAD│
└────┘
   │
   └──> ○ append GPL
        │
        ○ add distributed
        │
        ○ wrote a readme file
┌────┐
│HEAD│
└────┘
   │
   │    ○ append GPL
   │    │
   └──> ○ add distributed
        │
        ○ wrote a readme file

即,其实只是指向不同的版本号而已

小结

  • 当前版本是HEAD,如果要回退的话,使用git reset --hard id
  • id不清楚时,可以使用git log
  • 如果还不清楚,那么可以使用git reflog

工作区和暂存区

工作区就是当前工作目录

版本库就是git init时创建的.git文件

暂存区就是git add时把文件放置的位置

然后使用git commit就会把暂存区的东西全部放到HEAD所指向的分支

修改

git第一次修改add,这时候再进行git第二次修改,然后git commit,提交的是第一次修改的东西,如果想提交第二次修改的东西,需要对第二次修改的东西进行git add,再commit

撤销修改

如果是本地文件修改,还没有add,那么可以使用git checkout -- filename.xx或者git restore filename.xx

如果是本地文件修改,已经add,那么可以使用git reset HEAD filename.xx回到还没有提交的状态,然后再使用上面的checkout语句或者restore语句

如果已经commit了,那么使用git reset --hard HEAD 版本号

删除

在本地进行删除,使用rm语句即可,但如果已经上传过了,此时误删文件,可通过git restore xxx.xx来进行复原

远程

重要的事情说三遍

重要的事情说三遍

重要的事情说三遍

一定要用git bash的2.35版本,不要用2.34版本

本来好好的连接github没问题,但是想着github经常连不上,下载也慢,就想用码云。然后2.34版本(windows)在push的时候,没有弹出要密码啥的,整的我不会了,花了一下午时间都没有解决,结果重新安装2.35版本,奇迹般地好了!!!

常用地几个操作:

git remote -v

git remote rm xx

git remote add

git push

分支

创建与合并

HEAD指向当前分支,比如当前分支为master,而分支指向最新提交,如当前commit一下,那么master就指向最新commit的内容

常用命令

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>或者git switch <name>

创建+切换分支:git checkout -b <name>或者git switch -c <name>

合并某分支到当前分支:git merge <name>

删除分支:git bracn -d <name>

解决冲突

主要是merge,如果遇到冲突的,那么就需要手动来指定那个保留了

开发策略

实际中,master是稳定的,最好是在其他分支上进行合并,然后在大版本上进行合并到master

bug分支

遇到需要修改的bug,使用stash将当前分支对应的工作现场存储起来,后面使用git stash pop进行恢复

小结

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

标签

给HEAD指向的内容打上标签

如果直接使用git tag v1,那么则会给当前HEAD指向commit打上v1的标签,如果想给之前的commit内容打上标签,那么根据提交的编号来打

git log --pretty=oneline --abbrev-commit

此条语句会显示历史提交信息,如下:

36805b2 (HEAD -> dev, tag: v1.0, origin/dev) dev hello
d23aff1 add merge
dba071c conflict
df07a2f master
d12a53d dev
04883af conflict fixed
273a3f7 & simple
26db4e4 AND simple
15899cc branch test
a1ee66f of files
80f884c git tracks changes
31c3638 stage and LICENSE
4c6b24b append GPL
9e68617 add distributed
00881b1 wrote a test.txt

这样,如果想给conflict打上标签,那么可以使用git tag v0.9 dba071c

查看标签使用git show

posted on 2022-03-03 19:32  lpzju  阅读(35)  评论(0编辑  收藏  举报

导航