前言
放假咯 放假咯 今天可以回家过年咯 那就祝各位虎年大吉啦!
年前的一篇随笔 想到啥写啥咯。
一个git沙盒随便玩
learngitbranching.js.org/?locale=zh_…
安装git
那么简单 肯定都会的啦 直接上链接。
配置user信息
git config --local/global/system user.name 'xxx'
git config --local/global/system user.email 'xxx'
local - 只对某个仓库有效 默认值
global - 对当前用户所有仓库有效
system - 对系统所有登录的用户有效
创建git文件(git init)
Git 基本操作
git add (添加文件到暂存区)
git add xxx (添加某个文件到暂存区,后面可以跟多个文件,以空格分开)
git add . (添加当前更改的所有文件到暂存区)
git commit
git commit -m "xxx" (提交暂存的更改,并记录备注信息)
git commit -am (等同于 git add . && git commit -m)
git commit --amend (对最近一次的提交的信息进行修改,此操作会修改commit的hash值)
git pull
git pull <远程主机名> (从远程仓库拉取代码并合并到本地,git pull 等同于 git fetch && git merge )
git pull --rebase <远程主机名> (使用rebase的模式进行合并)
git fetch
与git pull不同的是git fetch仅仅只会拉取远程的更改,不会自动进行 merge 操作。对当前的代码没有影响
git branch
git branch(查看本地分支)
git branch -r(查看远程分支)
git branch -a(查看本地和远程分支)
git branch new_branch(创建分支)
git checkout new_branch(切换分支)
git branch -D 分支名(删除不需要的分支)
git branch -m new_branch another_name(重命名分支)
文件重命名(git rm 文件名 文件名)
Git移动操作(git mv)
git mv index.html src/
查看版本历史(git log)
git log --oneline(一行展示)
git log -n2 --oneline(一行展示最近两条)
git log --oneline --all(一行展示所有分支)
git log --oneline --all -n2(一行展示所有分支的最近两个)
git log --oneline --all -n2 --graph(一行图形化展示所有分支的最近两个)
通过图形界面工具查看版本历史(gitk)
commit tree blob 三个对象之间关系
一个commit对应一颗树(tree)
树是当前commit那个点项目所有文件的快照
大树里面嵌套小树/blob 小树展开最后叶子节点就是文件
blob表示具体的某一个文件
git cat-file -p 版本号
git remote命令
命令管理一组跟踪的存储库
git remote -v
git remote add
git remote remove name
git reset
用于将当前HEAD
复位到指定状态。一般用于撤消之前的一些操作(如:git add
,git commit
等)。
用来设置分支的头部指向,移动 HEAD 以及它所指向的 branch,当进行了一系列的提交之后,忽然发现最近的几次提交有问题,想从提交记录中删除,这是就会用到 git reset 命令,这个命令后面跟 commit id,表示当前分支回退到这个commit id 对应的状态,之后的日志记录被删除,工作区中的文件状态根据参数的不同会恢复到不同的状态。
git reset -- soft:保留工作目录的内容,并把因为保留工作目录内容所带来的新的文件差异放进暂存区。
git reset --mixed: 默认选项,工作目录的修改、暂存区的内容以及由 reset所导致的新的文件差异,都会被放进工作目录。
git reset --hard: 重置stage区和工作目录,没有commit的修改会被全部擦掉(无论暂存区还是工作区)。
git revert
它和reset差不多意思回滚某次的提交,此操作不会修改原本的提交记录,而是会新增一条提交记录来抵消某次操作。
区别在于:
git revert会新建一条 commit 信息,来撤回之前的修改。
git reset会直接将提交记录退回到指定的 commit 上。
git revert commitId
git revert commitId -m(针对 merge 的 commit)
git revert commitId1 commitId2 ...(回滚多次的提交,这是一个前开后闭区间,即不包括 commitId1,但包括commitId2 。)
git restore
git restore --staged 文件名: 将文件从暂存区撤出,但不会撤销工作区文件的更改(即: git status 提示的 被修改且被加入暂存区的内容会被撤销,工作区文件的更改不会变)
git restore 文件名 :将不在暂存区的文件撤销更改 (即: git status 提示的被修改但未被加入暂存区的内容,会被撤销)
git rebase
rebase 翻译为变基,他的作用和 merge 相似,用于把一个分支的修改合并到当前分支上
Rebase 使你的提交树变得很干净,所有的提交都在一条线上。
一些开发人员喜欢保留提交历史,因此更偏爱 merge。
另外,在解决冲突的时候,用merge只需要解决一次冲突即可,而用rebase的时候,需要依次解决每次的冲突,才可以提交。
而有些人可能更喜欢干净的提交树,于是偏爱 rebase。仁者见仁,智者见智。
特别注意:以下操作在自己的分支做变更还未集成到团队分支上,因为这种操作会修改团队分支的历史记录。
修改老旧commit的Message(rebase -r)
把连续的commit整理成一个(rebase -s)
把几个commit整理成一个(rebase -s)
git cherry-pick
可理解为挑拣几条commi,作为一个新的提交引入到你当前分支上
git cherry-pick c2 c1 当前分支添加commit节点
比较两个commit的差异(git diff)
比较HEAD和HEAD文件的差异(git diff HEAD HEAD^^)
看不同提交的指定文件的差异(git diff commitID commitID)
比较暂存区和HEAD所含文件的差异(git diff --cached)
比较工作区和暂存区所含文件的差异(git diff -- 文件名 文件名 文件名...)
Git隐藏(Stash)操作 - 开发中临时加塞紧急任务(git stash)
git stash(把本地的改动暂存起来)
git stash list(查看 stash 有哪些存储)
git stash apply(将操作返回到工作区中,stash列表堆栈信息不清除,可反复使用)
git stash pop(将操作返回到工作区中,stash列表堆栈信息清除)
git stash clear(删除所有缓存的 stash)
问题场景/些许操作
修改最新commit的message(git commit --amend)
让暂存区恢复成和HEAD一样(git reset HEAD)
取消暂存区部分文件修改(git reset HEAD -- 文件名 文件名...)
让工作区的文件恢复成和暂存区一样(git checkout -- 文件名)
消除最近几次提交(git reset --hard commitID)
将本地仓库同步到GitHub
1.github创建项目
2.git remote add origin 项目git地址
3.git push -u origin 分支名
不同人修改了不同文件如何处理
解1:git fetch git merge 远端分支/id
解2:git pull(相当于上面两步)
不同人修改了同文件不同区域
解1:git fetch git merge 远端分支/id
解2:git pull(相当于上面两步)
不同人修改了同文件相同区域
git pull
手动解决冲突
git commit
git push
一人变更了文件名和一人修改文件内容提交冲突
git pull
双方同时都修改了文件名提交冲突
git pull
git status
手动解决冲突
git rm 文件(删除协商不想要的文件)
git add 文件(最终协商确定的文件)
git commit
git push