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(文件名称)
示例
- 第一步:文件名变更 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
- 简化步骤
$ 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 不推荐使用 强制使用本地覆盖远程仓库