git

Git 开发流操作

Posted by 杨一 on 2020-06-23

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 的三个对象: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