GIT学习随笔

Posted 扬帆去远航

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIT学习随笔相关的知识,希望对你有一定的参考价值。

GIT学习随笔

学习参考路径:

  1. https://www.liaoxuefeng.com/wiki/896043488029600
  2. https://study.163.com/course/courseLearn.htm?courseId=1004421003#/learn/video?lessonId=1048771063&courseId=1004421003
  3. https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000

git pull只是拉取当前分支内容

git结构

  • 工作区
  • 暂存区
  • 版本区(仓库区)

git 理解

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt                添加到暂存区
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."     提交到版本库

git创建本地仓库操作

  1. git初始化:git init

  2. git 配置:

    git config user.name "name"

    git config user.email "email"

  3. 查看用户及邮箱:

    git config user.name

    git config user.email

  4. 设置忽略文件:

    新建 .gitignore文件,在这个文件中写入忽略规则。

    忽略py文件:*.py

    忽略t目录:/t

查看日志

git log 查看提交的记录

git log --pretty=oneline / git log --oneline 一行展示

git log -p 展示修改了哪些文件,修改的内容是什么

git reflog 记录你的每一次命令

gitk 图形化界面查看提交记录

git log -n 查看最近的n次提交

git克隆

# git拉取远程指定分支
$ git clone 远程仓库地址 -b 远程分支 [本地文件目录]

# 查看git的配置信息
git config -l

git注意点

工作区的文件A内容与远程区文件A内容不一致,pull之后会覆盖工作区文件A内容
暂存区的文件A内容与远程区文件A内容不一致,必须commit 或者 stash后才能pull(否则报错),然后解决冲突

commit前的内容都可以暂存,git pull之后解决冲突即可

切换分支前必须commit 或者 stash

解决冲突的两种方式

解决方式1:
    git add .
    git commit -m \'注释\'
    git pull,有冲突
    解决冲突,继续提交推送

解决方式2:【git在不想commit的情况下进行git pull操作】
    git stash save \'注释\'
    git pull
    git stash pop index
    解决冲突,继续提交推送

git stash使用

# 暂存(commit前的内容都可以暂存)
git stash save \'本次暂存的标识名字\'

# 查看暂存记录
git stash list

# 恢复指定的暂存工作, 暂存记录保存在list内,需要通过list索引index取出恢复
# pop命令恢复,恢复后,删除保存在list内记录
git stash pop stash@{index}
# apply命令恢复,恢复后,暂存区域会保留当前的记录
git stash apply stash@{index}

# 删除list内的某个暂存
git stash drop stash@{index}

# 删除全部暂存
git stash clear

比较差异

git diff 学习

git diff [文件名]

git diff --cached [文件名]

git diff HEAD [文件名]

git diff
-abcd      -代表文件修改前的
+abcde     +代表文件修改后的

撤销

前提:必须是已经跟踪的文件。若新增一个文件未add跟踪,则不可撤销。

  1. 放弃工作区的修改 即还没有git add .

    git checkout -- 目录/文件路径 缓存区覆盖工作区

  2. git checkout 版本号 目录/文件路径 版本库覆盖工作区,并覆盖缓存区

版本回退

git reset --hard HEAD^ 回退上个版本

git reset --hard HEAD~10 回退10个版本

git reset --hard <版本号> 回退到指定的版本号

向前或向后切换版本(指针的移动)

HEAD表示当前最新版本
HEAD^表示当前最新版本的前一个版本
HEAD^^表示当前最新版本的前两个版本,以此类推...

HEAD~1表示当前最新版本的前一个版本
HEAD~10表示当前最新版本的前10个版本,以此类推...

撤销与回退版本的对比

git checkout 版本号 .

分支master执行版本号不变,只是将其他版本的内容覆盖到了当前版本

git reset --hard 版本号

分支master指向其他版本号。

git checkout 版本号 .

王鹏远@DESKTOP-7348GT4 MINGW64 ~/Desktop/BCD (master)
$ git reflog
f29b04a (HEAD -> master) HEAD@{0}: commit: C3
85cb019 HEAD@{1}: commit: C2
54a8043 HEAD@{2}: commit (initial): C1

王鹏远@DESKTOP-7348GT4 MINGW64 ~/Desktop/BCD (master)
$ git log --oneline
f29b04a (HEAD -> master) C3
85cb019 C2
54a8043 C1

git reset --hard 版本号

$ git reflog
f1d7e32 (HEAD -> master) HEAD@{0}: commit: C3
18a1f87 HEAD@{1}: reset: moving to 18a1
571589f HEAD@{2}: commit: C2
18a1f87 HEAD@{3}: commit (initial): C1

王鹏远@DESKTOP-7348GT4 MINGW64 ~/Desktop/ABC (master)
$ git log --oneline
f1d7e32 (HEAD -> master) C3
18a1f87 C1
删除文件

https://www.liaoxuefeng.com/wiki/896043488029600/900002180232448

分支

重点理解:master是一个初始分支,master指向最新的提交,HEAD指向当前分支

  1. 创建分支:$ git branch dev

  2. 切换分支:$ git checkout dev

  3. 创建并切换分支:$ git checkout -b dev

  4. 推送本地分支到远程分支:$ git push --set-upstream origin dev

  5. 查看分支:

    $ git branch 查看本地所有的分支名称

    $ git branch -a 查看本地及远程所有的分支名称

    $ git branch -r 查看远程所有的分支名称

    $ git branch -v 查看本地所有的分支名称+版本号+注释信息

  1. 合并分支:git merge dev

  2. 删除本地分支:$ git branch -d dev

    丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除

  3. 删除远程分支1:

    1. 先删除本地分支:$ git branch -d dev
    2. 再推送到远程:$ git push origin :dev (因为推送到远程分支是:git push origin dev:dev)
  4. 删除远程分支2:git push origin --delete 分支名

切换分支的一个注意点

在dev分支下修改了一个已经commit的文件,此时修改的文件在commit之前无法切换分支

可以使用git stash 暂存

$ git checkout master

error: Your local changes to the following files would be overwritten by checkout:
        b.txt
Please commit your changes or stash them before you switch branches.

查看分支的合并情况

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

git log --graph

解决冲突

冲突解决:修改文件内容

修改后操作:

$ git add readme.txt 
$ git commit -m "conflict fixed"

远程仓库

创建SSH Key

ssh-keygen -t rsa -C "youremail@example.com"

GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了

关联本地仓库到远程仓库
  1. 本地初始化一个仓库:git init

  2. 配置:git config user.name "wpy" git config.email "email"

  3. github创建仓库

  4. 关联仓库:

    1. git remote add origin git@github.com:wpy/仓库名.git 关联

    2. git push -u origin master

      加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

    3. 之后的提交可以使用git push origin master

查看远程库的信息
  1. 查看远程仓库信息:$ git remote

    $ git remote
    origin
    
  2. 查看详细的远程信息:git remote -v

    $ git remote -v
    origin  git@212.64.57.50:Yong/Feed.git (fetch)
    origin  git@212.64.57.50:Yong/Feed.git (push)
    
  3. 查看远程分支:git branch -r

    $ git branch -r
      origin/HEAD -> origin/master
      origin/dev
      origin/master
      origin/test
    
  4. 查看本地及远程所有分支:git branch -a

    $ git branch -a
      dev
      master
    * test
      remotes/origin/HEAD -> origin/master
      remotes/origin/dev
      remotes/origin/master
      remotes/origin/test
    
推送本地分支到远程分支

本地开好分支,然后推送到远程

$ git checkout -b dev 	//创建并切换到分支dev
$ git push origin dev:dev
//推送本地的dev(冒号前面的)分支到远程origin的dev(冒号后面的)分支(没有会自动创建)

通俗方式二:

1621697795690

抓取远程分支(切换远程分支)

远程先开好分支,然后拉取到本地

切换到远程dev分支,在本地起同名分支,并切换到本地的这个同名分支

git checkout -b dev origin/dev 			//检出远程的dev分支到本地

开发完成后推送分支到远程:

$ git push origin dev

通俗方式二:

删除远程分支

git push origin --delete 远程分支名

error:

回退版本---修改内容/commit---push(报错)---pull(冲突,合并)---add---commit---push

aaa@DESKTOP-2EBU1DH MINGW64 ~/Desktop/lx (test)
$ git commit -m "three 3"
[test 88c7878] three 3
 1 file changed, 2 insertions(+), 1 deletion(-)

aaa@DESKTOP-2EBU1DH MINGW64 ~/Desktop/lx (test)
$ git push
To github.com:wangpy-github/lx.git
 ! [rejected]        test -> test (non-fast-forward)
error: failed to push some refs to \'git@github.com:wangpy-github/lx.git\'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: \'git pull ...\') before pushing again.
hint: See the \'Note about fast-forwards\' in \'git push --help\' for details.

aaa@DESKTOP-2EBU1DH MINGW64 ~/Desktop/lx (test)
$ git pull
Auto-merging b.txt
CONFLICT (content): Merge conflict in b.txt
Automatic merge failed; fix conflicts and then commit the result.

版本打标签

本地打标签:

git tag -a 标签名 -m \'标签描述\'

推送标签到远程仓库:

git push origin 标签名

删除本地标签

git tag -d 标签名

删除远程仓库标签

git push origin --delete tag 标签名

以上是关于GIT学习随笔的主要内容,如果未能解决你的问题,请参考以下文章

小白第一次使用Git随笔

Git学习-使用Git 代码将本地文件提交到 GitHub

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

如何管理在每个 git 版本中添加私有代码片段?