Git对应场景及指令

Git

1.简介

分布式版本控制软件

分布式:每台终端维护了所有分支和版本信息

服务端和客户端都是有一个完整的版本库.

版本控制: 版本控制

没有服务器 客户端也是可以进行版本控制

软件:git就是一个软件

特点:

  • 优秀的存储能力
  • 非凡的性能
  • 开源
  • 容易备份
  • 支持离线操作
  • 定制流程

目前基于git 的服务厂商软件

Git GitHub gitLab Gitee

2.Git 安装

下载地址:https://git-scm.com/downloads 一路下一步(安装的时候回自动的添加环境变量)

3.基础配置

1全局配置

##设置用户名和邮箱  设置成全局的
$ git config --global user.name 'sff'
$ git config --global user.email '759502721@qq.com'

##查询全局的配置
$ git config --global --list
user.email=759502721@qq.com
user.name=sff

2 其他配置

当然有了全局的配置 肯定还是有其他级别的配置 ,这些配置都是会以配置文件的形式配置在文件系统中

local:仓库目录/ .git/config

global:C:/Users/sff/.gitconfig

system:软件安装位置/etc/gitconfig

##只对某一个仓库有效   常用
$ git config --local user.name 'sff'   
## 对当前系统的登录用户有效  比如windows 的administrator  和   sff
$ git config --global user.name 'sff'   常用
##设置成全局的  对操作系统的所有登录用户有效   不常用
$ git config --system user.name 'sff' 

3 查询配置

## 只对某一个仓库有效   
$ git config --local --list
## 查询当前用户
$ git config --global --list    
## 查询全局
$ git config --system --list

##或者  效果一样
$ git config  --local -l
$ git config  --global -l
$ git config  --system -l

注意:local 可以缺省 默认作用域就是当前的仓库

4.创建git仓库

# 在当前目录新建一个Git代码库
$ git init

# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]

# 下载一个项目和它的整个代码历史
$ git clone [url]

5.文件添加

我们先来理解下 Git 工作区、暂存区和版本库概念:

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

在这里插入图片描述

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。
  • 图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。
  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行 git checkout . 或者 git checkout – 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
  • 当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
# 添加指定文件到暂存区
$ git add [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录
$ git add [dir]

# 添加当前目录的所有文件到暂存区
$ git add .

# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p

# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...

# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]

# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

# 暂存取和commmit 之间的不同之处
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git add .

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git diff --cached

## 工作区 和暂存区的不同点
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git diff

## 暂存区不要了 
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git reset HEAD

## 工作区回复成暂存区的内容
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git checkout -- test1.java(文件名称)

示例

  1. 第一步:文件名变更 README==>README.md
  ##  第二步
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git add README.md
  ## 第三步
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git rm README
rm 'README'

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        renamed:    README -> README.md

  1. 简化步骤
$ git mv readme   readme.md

6.日志查看

# 显示有变更的文件
$ git status

# 显示当前分支的版本历史
$ git log

# 显示所有分支的版本历史  附件的几个提交
$ git log  --all -n[数字]

# 显示所有分支的版本历史  + 图形界面
$ git log  --all --graph

# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat

# 搜索提交历史,根据关键词
$ git log -S [keyword]

# 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s

# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature

# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]

# 显示指定文件相关的每一次diff
$ git log -p [file]

# 显示过去5次提交
$ git log -5 --pretty --oneline

# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn

# 显示指定文件是什么人在什么时间修改过
$ git blame [file]

# 显示暂存区和工作区的差异
$ git diff

# 显示暂存区和上一个commit的差异
$ git diff --cached [file]

# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD

# 显示两个分支的差异
$ git diff [first-branch]...[second-branch]
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git branch -a
warning: ignoring broken ref refs/remotes/origin/HEAD
  dev-localv1.0
  dev-localv2.2
* master
  remotes/origin/dev-localv1.0
  remotes/origin/dev-localv2.0
  remotes/origin/dev-localv2.2
  remotes/origin/master

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git diff dev-localv1.0 dev-localv2.2  (后面可以加参数文件名)

# 显示两次commit的差异
$ git diff [first-commit]...[second-commit]
 
 


# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"

# 显示某次提交的元数据和内容变化
$ git show [commit]

# 显示某次提交发生变化的文件
$ git show --name-only [commit]

# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]

# 显示当前分支的最近几次提交
$ git reflog

# 修改上一次提交信息做变更
$ git commit --amend


# 修改某次提交的 信息变更
commit bbc2e67e045a43588d1978e203d7038cc25e83ec
Author: sff <759502721@qq.com>
Date:   Mon Apr 5 23:19:20 2021 +0800

    aaa   change  to test --amend ### 对啊 a  修改  使用a 的 基(base) 就是他的上次提交

commit cd1e2a291469a002264470c9721b67d24566608a (origin/master)
Author: sff <759502721@qq.com>
Date:   Mon Apr 5 22:51:51 2021 +0800

    a   

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git rebase -i  cd1e2a291469a
[detached HEAD 9ec1e92] aaa  aaaaa  change  to test --amend
 Date: Mon Apr 5 23:19:20 2021 +0800
 1 file changed, 2 insertions(+)
Successfully rebased and updated refs/heads/master.


## 合并多次连续的commit 信息  # 在rebase 模式选择squash
$ git rebase -i  aa30583db5
[detached HEAD 16475f7] 合并


##  合并多次不连续的commit 信息  # 在rebase 模式 先调整顺序 吧不连续的在文件编辑的时候拍的连续 选择squash

## 版本回退
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git reset --hard  628d37af57626f72  ##某次提交后的  慎用
HEAD is now at 628d37a Merge branch 'master' of https://github.com/shengfangfang/gitStudy


## 当前正在修改  有一个优先级高的bug 突然来了  保存当前的修改  去修bug  
$ git stash  当前的修改暂存 并回复到HEAD  
 
------修改好了提交
$ git stash pop   拿出来 和修改后的bug 代码合并

7.分支操作

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 列出所有本地分支和远程分支
$ git branch -a

# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]

# 新建一个分支,并切换到该分支
$ git checkout -b [branch]

# 新建一个分支,指向指定commit
$ git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 切换到上一个分支
$ git checkout -

# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]

# 删除分支
$ git branch -d [branch-name]  ##分支里面数据没有被merge 的话   可能会报错  可选用下面的命令
$ git branch -D [branch-name]  ## 强制删除分支  可以控制删除风险

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

8…gitignore

.gitignore 文件里面记录了那些文件不纳入git 的版本控制文件里面来 下面是常用的

# 所有.d 结尾的文件
*.d 

# *.aaaa/ 文件夹都不要   但是  *.aaaa 文件需要
*.aaaa/  
## bbb 文件夹/文件   不管理
bbb
## bbb 文件夹不管理
bbb/

9.git 远程备份

1.本地备份

##哑协议 没有进度
$ git clone --bare 仓库位置的/.git  到xxxx.git
##智能协议 
$ git clone --bare file:///仓库位置的/.git  到xxxx.git

2.远程备份

# 查询单前的仓库的远程仓库地址
$ git remote -v 

# 添加远程仓库地址
$ git remote add  远端仓库名称(一般叫origin)   'file://文件路劲'/'http://url地址'

# 查询所以分支  包括本地的和远程的
$ git branch -av

# 提交代码 提交代码到远程 下面这个命令会有以下情况
1.在没有指定本地和远程的分支关联的情况下  会提示让你关联分支
  git push --set-upstream  本地分支(可以省略) 远端仓库名称(可以省略) 远端分支
2.如果有关联分支的情况的话  就是会提交成功
$ git push 


3.常见问题

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git push
To https://github.com/shengfangfang/gitStudy.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/shengfangfang/gitStudy.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
##上面问题就是说本地有commit  在push到远程的时候  远程有文件改动  需要先拉取远程分支的文件
1.拉取远程分支数据
$ git fetch
2 手动处理冲突
3 提交到远程

4.或者直接使用 git pull  

10. .git 文件夹

1.文件结构

所有文件或者文件夹

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git (GIT_DIR!)
$ ls
COMMIT_EDITMSG  ORIG_HEAD    gitk.cache  info/     packed-refs
FETCH_HEAD      config       hooks/      logs/     refs/
HEAD            description  index       objects/

2.HEAD 文件

git 当前使用的分支

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git (GIT_DIR!)
$ cat head
ref: refs/heads/temp

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git (GIT_DIR!)
$ cd ..

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (temp)
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ cd .git

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git (GIT_DIR!)
$ cat head
ref: refs/heads/master

3.config 文件

保存本地仓库【local级别】的配置

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git (GIT_DIR!)
$ cat config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = https://github.com/shengfangfang/gitStudy.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[branch "dev-localv2.2"]
        remote = origin
        merge = refs/heads/dev-localv2.2

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git (GIT_DIR!)
$ git config --local user.name 'sff'

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git (GIT_DIR!)
$ cat config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = https://github.com/shengfangfang/gitStudy.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[branch "dev-localv2.2"]
        remote = origin
        merge = refs/heads/dev-localv2.2
[user]
        name = sff

4. ref 文件夹

HEAD 里面的ref 指向该文件夹内容

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git/refs (GIT_DIR!)
$ ls
heads/  remotes/  tags/
## heads 分支
## tags 里程牌类似

5.heads 文件夹内容

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git/refs (GIT_DIR!)
$ cd heads/

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git/refs/heads (GIT_DIR!)
$ ls
dev-localv1.0  dev-localv2.2  master  temp  temp3  temptwo

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git/refs/heads (GIT_DIR!)
$ cat master
ea22625930fbecf88be46ac55028f588e1718b60

ea22625930fbecf88be46ac55028f588e1718b60 commit 提交的记录

6.objects 文件夹

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git (GIT_DIR!)
$ cd objects/

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git/objects (GIT_DIR!)
$ ls
09/  24/  45/  58/  68/  88/  9e/  be/  c6/  d4/  e7/  f4/
1b/  26/  49/  5b/  71/  8e/  aa/  c1/  c7/  e0/  ea/  info/
20/  41/  51/  61/  74/  91/  bc/  c2/  cd/  e6/  ef/  pack/

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git/objects (GIT_DIR!)
$ cd e0

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git/objects/e0 (GIT_DIR!)
$ ls
caa1c0067c6b0a39a3979d69f13ba9225db701

e0 + caa1c0067c6b0a39a3979d69f13ba9225db701 组成哈希值

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy/.git/objects/e0 (GIT_DIR!)
$ git cat-file -t e0caa1c0067c6b0a39a3979d69f13ba9225db701
blob
##$ git cat-file -t  查询类型  bolb


$ git cat-file -p e0caa1c0067c6b0a39a3979d69f13ba9225db701   [下面是文件的内容]
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

问题:新建一个git仓库 提交一个commit 文件夹是doc/readme 会在objs 里面创建多少个tree/blob

一个commit -->tree

​ |

​ v

​ tree : tree doc (doc 下面有文件的话 就是会多一个blob)

									|

​ v

​ tree : readme

													|

​ v

​ blob :hello world (文件实际内容)

11. 配置文件相关

有时候有的配置文件远程已经有了,在开发阶段不需要的话就是可以使用命令关闭文件的追踪;
一段时间过后,可能又需要对配置文件上传

##文件的修改不会提交到仓库
git update-index --assume-unchange src/main/resources/META-INF/mysql_persistence.xml

## 文件需要提交的时候这个时候需要重新建立追踪
git update-index --no-assume-unchange src/main/resources/META-INF/mysql_persistence.xml

2.基本命令

2.2 分支名称修改

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git branch -m master main
[command:(
$ git branch -m 原分支名 新分支名
##如果是当前,那么可以使用加上新名字
$ git branch -m 新分支名称
)]

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (main)
$ git checkout dev-localv2.2
Switched to branch 'dev-localv2.2'
Your branch is up to date with 'origin/dev-localv2.2'.
[command:(
$ git checkout 分支名称
)]

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (dev-localv2.2)
$ git checkout main
Switched to branch 'main'
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)
[command:(
$ git checkout 分支名称
)]

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (main)
$ git branch -m main master
[command:(
$ git branch -m 原分支名 新分支名
)]
 

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git push origin :main
To https://github.com/shengfangfang/gitStudy.git
 ! [remote rejected] main (refusing to delete the current branch: refs/heads/main)
error: failed to push some refs to 'https://github.com/shengfangfang/gitStudy.git'
[原因是github的默认分支不允许删除,删除的分支是默认分支 去页面修改默认的分支设]


[修改后的分支]
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git push origin :main
To https://github.com/shengfangfang/gitStudy.git
 - [deleted]         main
[command:(
$ git push origin :原分支
)]

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git merge dev-localv2.2
Updating 201bbb2..aa30583
Fast-forward
 dev-localv2.0.java | 0
 dev-localv2.2.java | 3 +++
 2 files changed, 3 insertions(+)
 create mode 100644 dev-localv2.0.java
 create mode 100644 dev-localv2.2.java
[command:(
## 合并其他分支到当前分支
$ git merge 其他分支
)]

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:main

To push to the branch of the same name on the remote, use

    git push origin HEAD

To choose either option permanently, see push.default in 'git help config'.
[在没有设置当前分支到远程分支的追踪关系的时候  git push 是不能提交代码的 ]



sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git branch --set-upstream-to=origin/master master
Branch 'master' set up to track remote branch 'master' from 'origin'.
[command:(
## 设置本地分支和远程分支的追踪关系
$ git branch --set-upstream-to=origin/远程分支 本地分支
)]



sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/shengfangfang/gitStudy.git
   201bbb2..aa30583  master -> master
[
因为设置了本地分支和远程分支的关系 这里就直接提交
]

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$




### 从log中创建一个分支
sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git log

commit bce9b8b7b87a0a327bd6c7ca390d2e30e3a0f914
Author: sff <759502721@qq.com>
Date:   Mon Apr 5 19:04:19 2021 +0800

    change-branchname to master

commit 414dbd84028a8f3af27a5b713a7f402d5d10927b
Author: shengfangfang <47874236+shengfangfang@users.noreply.github.com>
Date:   Mon Apr 5 18:56:59 2021 +0800

    to master

commit c60d715e8bf072655f7638b1d4c27ceb2542059f (temp)
Author: sff <759502721@qq.com>
Date:   Mon Apr 5 16:50:09 2021 +0800

    add

commit e19d8a74c1fcb77b3f5686b343398ef585563d46
Author: shengfangfang <47874236+shengfangfang@users.noreply.github.com>
Date:   Mon Apr 5 16:36:35 2021 +0800

    Initial commit

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git checkout -b temptwo 414dbd84028a8f3af27
Switched to a new branch 'temptwo'

其他问题

分离头指针 (detached HEAD):

缺点:工作的head 没有处于分支的状态上 有必要的话可以生成一个新的branch 不然git 会清除在没有挂钩分支 上的提交

0d2e30e3a0f914
Author: sff 759502721@qq.com
Date: Mon Apr 5 19:04:19 2021 +0800

change-branchname to master

commit 414dbd84028a8f3af27a5b713a7f402d5d10927b
Author: shengfangfang 47874236+shengfangfang@users.noreply.github.com
Date: Mon Apr 5 18:56:59 2021 +0800

to master

commit c60d715e8bf072655f7638b1d4c27ceb2542059f (temp)
Author: sff 759502721@qq.com
Date: Mon Apr 5 16:50:09 2021 +0800

add

commit e19d8a74c1fcb77b3f5686b343398ef585563d46
Author: shengfangfang 47874236+shengfangfang@users.noreply.github.com
Date: Mon Apr 5 16:36:35 2021 +0800

Initial commit

sff@DESKTOP-N46EQ4G MINGW64 /d/Desktop/学习/5-Git/gitStudy (master)
$ git checkout -b temptwo 414dbd84028a8f3af27
Switched to a new branch ‘temptwo’






其他问题

分离头指针 (detached HEAD):一般原因是回到head 之前的版本修改数据,然后提交数据出现的问题

缺点:工作的head 没有处于分支的状态上 有必要的话可以生成一个新的branch  不然git 会清除在没有挂钩分支 上的提交

优点:切换出分支 ,在做尝试性的代码  ,觉得代码可以话 就关联分支 ,不然就切换到正常的分支 ,这个提交就可以自动的被git 清除

问题

1.Git refusing to merge unrelated histories
原因:git 远程仓库和本地仓库是不同的历史记录的时候,提交历史不一样 需要加上参数

git pull origin master后面跟上参数--allow-unrelated-histories
2.non-fast-forward
原因:一般是远程有提交数据  本地也有修改数据,并且有冲突产生
方案1:git fetch + git merge   合并之后git pull 
方案2:git push origin master --force 不推荐使用 强制使用本地覆盖远程仓库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值