玩转Git三剑客-补充上文Git操作

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

git branch -v 查看分支

git checkout -b 8c84be(历史版本截取一段建立新的分支)

对readme文件稍作修改:
vi readme
git commit -m'Add test'

git log --oneline --all --graph(图形界面查看演进历史)

gitk:通过图形界面工具来查看版本历史

查看./git

cd ./git
cat HEAD 查看当前分支

git config --local user.name 'liu'(修改配置)

分离头指针情况下的注意事项

执行了命令git checkout 415c5c(未存在的分支)
修改文件之后接到任务要去master主分支里面修改一些东西,执行命令git checkout master
git会默认你刚刚对那个分支进行的修改是无用的,过段时间会清理掉,执行git checkout master他会提示建立新分支保存刚刚的操作。
删除不必要的分支
git branch -D [分支名]

修改最新commit的message

git log -1(查看message)
git commit --amend

修改老旧commit的message

git log -3(查看最近三次提交)
git rebase -i 【需要改变的版本的父版本】
找到将要修改的message,把pick改成r,保存退出
会自动跳转到修改界面,修改message,保存退出
以上操作都是在自己的分支上做变更,还没有贡献到团队的集成分支上
怎么把连续多个commit整理成一个?
git rebase -i 【需要合并的commit的最早版本的父版本】(与修改message操作差不多)
保留待合并的历史版本的其中一个,其他的pick改成s,保存退出
会自动跳转到修改界面,增加一行为什么要合并的message,保存退出
怎么把间隔的几个commit整理成一个?
git rebase -i [需要合并的commit的最早版本的父版本]
保留待合并的历史版本的其中一个,其他的pick改成s,将要合并的commit写总在一块(上下行),保存退出
git rebase --continue

怎么比较暂存区和HEAD所含文件的差异

git diff --cached

怎么比较工作区和暂存区所含文件的差异

git diff
git diff -- [指定文件]
git diff -- readme.md styles/style.css

如何恢复暂存区和HEAD的一样

git reset HEAD
git reset HEAD -- [指定文件]

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

git checkout -- index.html

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

git diff [历史版本1] [历史版本2] -- [指定文件]

正确删除文件

git rm [文件名]

开发中临时加塞了紧急任务,处理

git stash

git stash list

完成紧急任务之后要恢复之前正在做的事情
git stash apply 
执行完此命令之后,工作区就会有最新stash的内容,且stash堆栈还有保留。
用git stash pop之后,stash堆栈就不会保留

指定不需要Git管理的文件

.gitignore

doc/ 忽略doc文件夹下的所有文件,但是名字为doc的文件还是要管理

doc 忽略名字为doc的文件或文件夹

如何将Git仓库备份到本地

git remote add zhineng file://【git地址】
git push --set-upstream zhineng suling

把本地仓库同步到github

git remote add github [github上的ssh地址] #报错,github有个文件LICENSE
git fetch github master #提示将github的master先fetch下来

用gitk --all查看分支树发现github的master与本地的master不相干,都是独立的树
切换分支,git checkout master
现在要合并它们,使用命令git merge,由于他们不相干merge出错
git merge -h查看帮助

git merge --allow-unrelated-histories github/master

git push github master

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

同级目录下克隆两次远端项目,其中一个需要更换文件夹的命名
修改其中一个local.user跟local.eamil模拟两个人
进入刚克隆好的项目中,拉取远端的分支:
git checkout -b feature/add_git_commands origin/feature/add_git_commands

origin/feature/add_git_commands是远端的一个分支,上面的命令是根据远端分支创建一个本地分支并切换到分支上。
方便后面直接git push

当两个人同步github的远端项目,第一个人先对远端项目进行修改,第二个人再提交修改时报错“non fast-forwards”。
解决:
git fetch github
不要求线性分支可以使用git merge github/feature/add_git_commands

不同人修改了同文件的不同区域

开发之前,得先跟远端进行同步
git pull
查看分支
git branch -av
解决:
git fetch
git merge origin/feature/add_git_commands

不同人修改了同文件的同一位置

git push 失败
git pull 查看报错位置
<<<<HEAD
冲突内容
>>>>
手动修改保留需要部分,保存退出
git status
git commit 'Resolved conflict by hand with ...'
git push

同时变更了文件名和文件内容

git pull
git能够智能感知

把同一文件改成了不同的文件名

git pull同步
查看冲突文件的差异diff [文件1] [文件2]
git status查看状态

git 不处理
保留每个人修改的文件,让工作人员协商舍取
最后git push

禁止向集成分支执行push -f操作

git reset --hard [历史版本] 本地指向以前commit
git push -f origin feature/add_git_commands 强制将远程的也指向历史commit,之后的commit全部都消失了,是一个极其危险的操作,严格禁用push -f操作。

集成分支千万不要对他做变基的行为,只有在现有的情况下往上增加commit的方式。

在github上搜索自己想要的项目

高级搜索:
git 最好 学习 资料 in:readme
in:readme是搜索在readme文件上出现前面的关键字,不然就默认在项目名字跟简介上搜索
如果要搜代码:filename:xxx,xxx表示文件名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Irons_one

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值