GIT三剑客课程笔记

目录

建git仓库

把已有项目纳入git管理

新建的项目直接用git管理

创建变更

文件重命名

git版本日志

图形化查看版本历史

.git目录

commit,tree,blob三个对象之间的关系

分离头指针(detach head)

新建分支情况下,HEAD与branch以及HEAD的更多

删除不需要的分支

修改最新一次commit的message

修改老旧commit的message

怎么把连续的多个commit整理成1个

怎么把间隔的多个commit整理成一个

暂存区和HEAD的文件作比较

工作区和暂存区的文件比较

如何让暂存区恢复成和HEAD一样(就是放弃暂存区内容)

如何让工作区文件恢复为和暂存区一样

怎样取消暂存区部分文件的更改(部分文件恢复到和HEAD一样)

消除最近的几次提交(回退)

查看不同提交的指定文件的差异

正确删除文件的方法

开发中临时加了紧急任务怎么处理

如何指定不需要git管理的文件

git仓库备份到本地

不同人修改了不同文件如何处理

不同人修改了同文件的不同区域如何处理

不同人修改了同文件的相同区域如何处理

同时变更了文件名和文件内容如何处理

把同一文件变成了不同的文件名如何处理

集成使用禁忌

github高效搜索

开发的工作流模式


查看git版本

打开git bash,输入git --version

最小配置

配置user

配置user.name和user.email

git config --global user.name 'your_name'

git config --global user.email 'your_email@domain.com'

git config --local

git config --global

git config --system

git config --list --local(如上三个一致的--local等)(查看相关配置)

建git仓库

把已有项目纳入git管理

cd 项目代码所在文件夹

git init

新建的项目直接用git管理

cd 某个文件夹

git init your_project(会在当前路径下创建和项目名称同名的文件夹)

cd your_project

创建变更

将新文件纳入git管理(加入暂存区)

git add xxx

将已经被git管理过的文件,提交到暂存区(-u是update的意思)

git add -u

查看状态

git status

提交变更(暂存区的变化,提交到版本管理)(工作区直接提交到版本管理的话用的是-am)

git commit -m'ADD someting or babababa‘

查看git日志

git log

文件重命名

git mv readme readme.md

git commit -m'rename'

git版本日志

日志查询哪一次变更了什么东西

git log --oneline (--all)(--graph)(-n4(所有分支的最近四个,结果只有四个记录))

查询最近4次变更了什么

git log -n4 --oneline

查看当前是哪个分支

git branch -v

创建分支temp

git checkout -b temp xxxxxxxx

基于xxx分支创建aaa分支

git checkout -b aaa xxx

比较两个commit的不同·

git diff commitid1 commitid2

git diff HEAD HEAD^^(比较当前分支和他父亲的父亲的分支)

git diff HEAD HEAD~2(同上)

git log(当前分支的版本历史)

git log --all (--graph)(全部分支)

查看temp分支的日志

git log --oneline temp

图形化查看版本历史

gitk

.git目录

cat .git/HEAD 查看当前使用的分支

cat .git/config 一系列配置,包括用户名,邮箱等

ref引用目录,存放分支,tag等。

.git/ref/heads/master或者temp

git cat-file -t xxxxxx(是master或者temp等的hash值代表的类型)

查看xxxxx对应信息(blob,tree,commit,tag(指向commit类型等)等)

git cat-file -p xxxxxx

查看xxxxx对应内容

objects,里面有各种blob,只要内容相同,就是一个blob

commit,tree,blob三个对象之间的关系

一个commit只能对应一个tree(某种程度上相当于一个文件夹),通过tree呈现出来的在对应的时间点,这个commit对应的所有文件的信息的快照。

blob只与文件的内容有关,和文件的名字无关。

分离头指针(detach head)

就是在当前无分支的状态下进行开发,一旦切换到其他分支,代码容易被git当作垃圾给处理掉,并且如果checkout到了其他分支,新增的改动也会被丢弃。

当将处于分离头指针的状态下的代码直接提交的时候,git log,会显示

commit: kehdkajdhcksdjbcksdjbckedhks(HEAD)

但是这种时候的commit,既没有和分支绑定,也没有和tag绑定,使用gitk --all进行查看的时候,是找不到的,也就是说,git认为这种提交是不重要,日后是会被清除的。

可以直接使用git branch xxx kehdkajdh命令,将commit:kehdkajdh和分支xxx绑定在一起。

新建分支情况下,HEAD与branch以及HEAD的更多

当使用指令,基于分支xxx创建分支aaa时

git checkout -b aaa xxx

执行git log -n1,发现HEAD发生了变化,显示如下

commit ajdhbckhbckdsj (HEAD -> aaa,xxx)

cat ./git/HEAD

refs/heads/aaa

(HEAD指代新分支的最后一次提交,或者是分离头指针中的一个commit,但是实际上,都是指向一个commit,因为如上的aaa的类型,就是commit

(cat .git/refs/heads/aaa 显示ajdhbckhbck,

git cat-file -t ajdhbckhbck,显示commit))

当做了分支切换时,HEAD也会变成指向新分支。

删除不需要的分支

git branch -d 分支名(显示删不掉,not fully merged)

git branch -D 分支名(删了)

修改最新一次commit的message

git commit -amend,然后直接在界面修改

修改老旧commit的message

git rebase -i {老旧commitid}

之后进入一个界面,根据下面注释给出的信息,选择对应commit的那一行,pick改成r,之后保持。

之后会进入另一个界面,在这个界面修改message信息,之后再保存。

(rebase用到了分离头指针)

怎么把连续的多个commit整理成1个

git rebase -i 一个不属于要合并的commit的id (进入界面)

将要合并的commit(除第一个)的前面的pick改成s(squash)(然后保存,进入新界面)

在新界面上写合并的原因,再保存

怎么把间隔的多个commit整理成一个

git rebase -i 

进入界面,将想要合并的commit放在一起,后几个commit(除第一个)使用s(squash),保存

在新界面上写合并原因,保存

暂存区和HEAD的文件作比较

git diff --cached

工作区和暂存区的文件比较

git diff

git diff -- readm123(只呈现文件readm123的差异)

git diff -- read1 read2 read3(呈现这三个文件的差异)

如何让暂存区恢复成和HEAD一样(就是放弃暂存区内容)

git reset HEAD

如何让工作区文件恢复为和暂存区一样

git checkout -- filename

怎样取消暂存区部分文件的更改(部分文件恢复到和HEAD一样)

git reset HEAD -- filename1 filename2 filename3

消除最近的几次提交(回退)

git reset --hard commitid(暂存区和工作区都回退到这个commit)(回退的几次变更的东西会丢失,慎用)

查看不同提交的指定文件的差异

git diff branch1/commit1 branch2/commit2 -- filename1 filename2

正确删除文件的方法

git rm filename(工作区的文件被删除?)

开发中临时加了紧急任务怎么处理

对应的分支有bug,要临时加东西。

需要先把手头的工作存起来,等到将bug修复,生成新的commit提交之后,在继续做之前的工作。

git stash(将当前手头的工作先存放,相当于一个堆栈)

git stash list(查看)

git stash apply (弹出堆栈顶部的内容放到工作区去,并且执行git stash list,发现内容还在,可以反复使用)

git stash pop (弹出堆栈顶部的内容放到工作区去,并且执行git stash list,内容不在,会被删除)

如何指定不需要git管理的文件

(在github里面是.gitignore里面的)

但是如果将文件加到了暂存区,gitignore就没有作用了。

vi .gitignore(加入文件,文件夹)

mkdir doc

doc 加入,屏蔽了doc

doc/加入,屏蔽了doc文件夹(不管doc文件夹下面的东西,doc这个文件还是会管的)

如果是doc.gitignore,git不会识别这个文件。

git仓库备份到本地

git clone --bare /user/.................../.git   ya.git(哑协议)

git clone --bare file:///user/................../.git zhineng.git(智能协议)(存储打包,压缩)

git remote add zhineng file:///user/.................../zhineng.git

git push --set-upstream zhineng 12345branch(?)

案例操作:

 git remote github git@github.com:xxxx/git_learning.git

https://blog.csdn.net/qq_43727392/article/details/127879382

(git remote github不生效时,用git remote add origin)

 git remote -v

git push github --all

(git pull(等于先fetch再merge))

git fetch github master

gitk --all

(解决不是fast forward的问题(不是基于远端分支开发),1 rebase,2 merge)

git branch -av(列出本地和远端的分支)

git merge --allow-unrelated-histories github/master(将当前分支与远端的这个分支合并,--allow-unrelated-histories参数表示允许两个分支在历史上没有关联)

(rebase之后,只有一个父commit。merge之后有两个,一个是本地master,一个是远端master)

不同人修改了不同文件如何处理

git fetch github(防止不是fast forward)

git merge github/feature/add_git_commands

git push github

不同人修改了同文件的不同区域如何处理

fetch,push

git自动merge,相同区域需要人为介入

不同人修改了同文件的相同区域如何处理

git pull(拉取远端文件,然后merge,不过会报错,因为文件内容有冲突)

vi 有冲突的文件

若想都保留,就直接把

<<<<<<<<<<<<<<<<,HEAD

====================

>>>>>>>>>>>>>>>>>>>SKDGKAJSBKAJSBX

都删除掉,留下之间的两部分内容。

然后git status

之后可以根据git的提示

想合并:git commit

不合并:git merge --abort(恢复之前的状态)

之后git push github

同时变更了文件名和文件内容如何处理

git pull自动将更新的文件名,对本地旧文件的文件名更新,并自动进行合并。

把同一文件变成了不同的文件名如何处理

这个时候使用git pull,会在本地留有对于这个原本的那个文件的两个文件,并且报冲突。

git status

git add xxx1

git status

git rm xxx2

git commit

git push

(删除一个,提交一个)

集成使用禁忌

git push -f(不是fast forward也能push上去)

例子:

git reset --hard xxxx 再加上 git push -f

可以让界面上显示的以往各个commit记录都消失,以前的各种commit,添加的很多功能可能就会没有了。

公共分支严禁拉到本地做rebase变基。会让后续的子分支,不是fast forward。后续的子分支就只能也手动rebase,或许会一个个commit去改进,非常麻烦。

github高效搜索

在readme里进行搜索

搜索框里输入:

xxx akejdh ooo in:readme stars:>1000

(其余详细的看github的help)

开发的工作流模式

就是选用合适的开发分支模型

主干开发

git flow

github flow

gitlab flow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值