Git 开发流操作
把有项目代码的文件设置成 Git 仓库来管理:
- git init
查看当前分支提交操作记录(n4: 就近的4次记录):
- git log [–oneline] [–all] [-n4] [–graph]
查看分支
- git branch -v
拉取远程分支
- git fetch
创建新临时分支,基于何处创建分支:
- git checkout -b temp [commit]/[branch]
Git 自带的图形化界面:
- gitk [-all]
复原命令(工作目录区和暂且区所有的操作都会被清出掉):
- git reset --hard
改变工作目录区和暂且区的文件名字:
- git mv readme readme.md
Git 的三个对象:Commit、Tree、blob
- 每次 Commit 都会生成一个 Commit 对象,这个对象和Tree 对象是一一对应,Tree 对象中保存着当前 Commit 时间点状态的所有文件以及快照;
- 查看Commit内容 git cat-file -p [提交Commit记录的hash值]
- 查看Tree内容 git cat-file -p [提交Tree记录的hash值]
- 查看blob内容 git cat-file -p [提交blob记录的hash值]
- 输出内容到文件中 echo “hello,world” > readme
如何删除不需要的分支:
- git branch -av
- gitk -all
- git branch -D temp
修改 Commit 的Message,只是修改git log 的Commit记录做变更:
- git commit --amend
- git rebase -i [上次commit的记录值]
把连续多个 Commit 整理成1个 Commit :
- git rebase -i [若有首节点的 Commit 的记录值]
pick
pick > s
pick > s
pick > s
pick
把间隔多个 Commit 整理成1个 Commit :
- git rebase -i [首节点的 Commit 的记录值]
新建 pick [父节点]
pick -> s [另外一个节点]
pick [默认中间节点]
比较暂存区和HEAD所含的文件的差异?
- git diff --cached
比较暂存区和工作区所含的文件的差异?
- git diff – [文件名字]
如何让暂存区的文件回归成工作区(HEAD)一样的(暂存区的文件一律作废)?
- git reset HEAD
- 暂存区 使用 reset
- 工作区 使用 checkout
如何让工作区的文件整成暂存区一样的(工作区的文件一律作废)?
- git checkout --文件名
怎么取消暂存区部分文件的更改(部分文件恢复成HEAD的文件)?
- git reset HEAD – 文件名字 文件名字
消除最近的几次Commit提交(回接到链中间的节点,慎用)?
- git branch -av
- git log --graph
- git reset --hard 1656563265(commit节点值)
查看不同的Commit之间的发分支不同?
- git diff temp[gsjdfdb12] master[146dfdsfsfcdzfsd]
- git diff temp master – index.html
正确删除文件的方法:
- git rm [-rf] filename
突发加塞了紧急任务怎么办(需要解决bug,但是手头的记录也得保存起来)?
- git stash
- git stash list
- git stash pop / apply(d堆栈中不会删除)
如何指定不需要的 Git 管理的文件?
- 修改.gitignore 文件
- name加 / 代表name是一个文件,不想此文件下的子文件被管理;但是name是一个文件时,会被管理的;
- name不加 / 文件夹以及子文件夹都不管理以及文件;
如何Git 仓库备份到本地?
- git clone --baree(不带工作区) /Users/suling/101-GitRunner/git_learning/ git ya.git
- git clone --bare file: ///Users/suling/101-GitRunner/git_learning/ git zhineng. git
把本地仓库同步到GitHub :
- git remote -v
- git remote add origin(名称) https://www.wfvdv.git
- git fetch origin master 仅仅是拉下来
- git branch -v [va]远端分支
- git checkout master
- git merge origin/master
- git pull origin master
不同的人在同一个分支上修改了不同的文件如何处理(远程一个分支,2个git客户端,2个文件)?
- 第二个用户操作 (第二个仓库)
- git clone *****.git [filename]sharegit
- git config --add --local user.name ‘git02’ //进入git02用户空间设置用户名,模拟第二个Git客户端
- git config --local -l
- git config --add --local user.email ‘git02@163.com’ * git config --local -l
- vi .git/config //出现错误可编辑操作
- git branch -av
- git checkout -b [localName]sharegit [remote]sharegit // 建立本地分支同时切换分支,与远程分支建立关系。默认clone 会执行remote add
- vi readme
- git add -u
- git status
- git commit -m “git02 add one readme”
- git push //省略了origin 本地分支:远程分支
- vi readme //sdd56s:第二个用户 第二次push
- git add -u
- git commit -m “git02 two add readme”
- git push
- 第一个用户操作
- git fetch [remote角色名字]github
- git branch -v
- git branch -av
- git checkout -b [localName]sharegit [remote]sharegit
- git branch -av
- vi index.html
- git add -u
- git commit -m “git01 add index.html”
- gitk --all
- 第一个人并没有提交 goto:sdd56s(第二个人再次push)
- git push gihub //报错 不是fast-forwards
- git fetch github
- git branch -av
- git merge gtihub/sharegit //由于两个人操作的是不同的文件 因此会顺利合并
- vi readme //检查readme 文件是否被第二个用户所修改
- git push github //再次进行推送
不同的人修改了同文件的不同区域如何处理?
- 第二个用户操作
- git pull
- vi index.html
- git add -u
- git commit -m “add one index”
- git push
- 第一个用户操作
- vi index.html
- git add -u
- git commit -m “add one index”
- git push //出错
- git status
- git fetch
- git push
不同的人修改了同文件的同一区域如何处理?
- 第二个用户操作
- git pull (fetch+merge)
- vi index.html //相同位置
- git add -u
- git commit -m “add one index”
- git push //报错
- git pull //冲突 报错
- 手动处理冲突
- git status //查看是否merge 成功
- git commit -m “Resolved conflict by hand with 4 git commands”
- git status
- git push
- 第一个用户操作
- git pull (fetch+merge)
- vi index.html //相同位置
- git add -u
- git commit -m “add one index”
- git push //第一个提交的
同时修改了文件名字和文件内容,怎么处理?
- 第一个用户操作 : 改变文件名字
- git pull
- git mv index.html index.hml
- git commit -am “改变文件名字”
- git push
- 第二个用户操作: 修改的是(旧)文件下的内容
- vi index.html
- git commit -am “修改内容”
- git push //报错
- git pull //不用git fetch +merge,直接pull 看git 是否可以智能解决问题(答案是Git自己可以解决)
- ls -al
- vi index.hml
多人同时修改了同一个文件名,怎么处理?
- 第一个用户操作 : 改变文件名字
- git pull
- git mv index.html index1.hml
- git commit -am “改变文件名字”
- git push
- 第二个用户操作: 改变文件名字
- git mv index.html index2.hml
- git commit -am “改变文件名字2”
- git push //报错
- git pull //冲突报错
- ls -al //会出现两个不同的文件
- diff index1.hml index2.hml //内容相同
- git status //需要手动处理 根据提示命令
- git rm index.html
- git add index2.hml
- git rm index1.hml
- git status
- git commit -m “处理完成”
- git branch -av
- git push
禁止向集成环境执行 push -f 操作
- git log --online
- git reset --hard b3f390c //重置之前commit 的值
- git push -f origin [远端分支]sharegit
解决因为两个仓库有不同的开始点的提交
- git push origin master allow-unrelated-histories
禁止向集成环境执行变更历史操作
master 分支需要回退到 [temp 分支 merge master 分支而形成的节点] 的前一个节点?
- git push -f origin [b3f390c]master
GitHub 如何搜索开源项目?
- RPC in:readme stars:>1000 filename:.gitlab.ci
- blog start easily in:readme stars:>1000