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表示文件名