刚才整理电脑桌面,看到了很久之前根据廖雪峰的git教程去学习git时整理的笔记,于是将其记录到博客。
创建版本库:
mkdir 文件夹名称 --创建文件夹
cd 文件夹名称 --进入文件夹。pwd查看当前文件夹路径
git init --将文件夹变为git可以管理的仓库
添加文件到版本库:
git add filename --添加文件到git仓库
git commit -m "描述信息" --提交文件到git仓库
修改文件后相关操作:
git status --查看git状态
git diff filename --查看文件修改
git add filename --修改文件后同样需要添加和提交
git status --查看当前仓库状态,可看到即将提交的被修改的文件
git commit -m "描述信息"
版本回退:
git log [--pretty=oneline] --查看历史版本记录。加书号里面的,显示概略信息(版本id和描述)
git reset --hard head^ --版本回退到上一个版本。head表示当前版本,^表示上一个版本,^^表示上上个版本,head~10表
示第前10版本
git reset --hard 版本号 --当回退到历史版本后,可用这种方法回到未来版本。版本号写几位就行,git会自动查找
git reflog --查看提交命令记录,找到未来版本id
管理修改:
第一次修改——>git add——>第二次修改——>git commit。在这种情况下,第一次修改通过add被加到版本库的暂存区,
而第二次的无add操作,所以commit的只是暂存区的第一次修改。整个过程之后可使用git diff来查看第二次修改确实未提交。
撤销修改:
git checkout -- filename --丢弃工作区的修改
git reset HEAD filename --丢弃暂存区的修改,使其变为工作区的修改,要彻底放弃这个修改,还需进行上一步
删除文件:
文件被提交到版本库后,在文件管理器删除文件后,还需要使用git rm filename 命令来删除版本库中的文件。
否则工作区和版本库不一致。如果工作区的文件是误删,则可以使用 git checkout -- filename来恢复。
(实际上checkout是拿版本库中的版本替换工作区的版本)
创建与合并分支:
git branch 分支名 --创建分支
git checkout 分支名 --切换到分支
git checkout -b 分支名 --创建并切换,是上两行命令的结合
git branch --列出所有分支
git merge 分支名 --合并分支名到当前分支
git branch -d branchName --删除分支
***推荐使用分支完成某个任务,完成后与主分支合并。这和直接在主分支上工作效果是一样的,
但过程更安全。
解决冲突:
当两个分支都对同一个文件有修改,使用git merge命令无法自动合并分支时,首先需要解决冲突(进入冲突文件,
对比冲突内容进行解决),之后再提交, 合并就完成了。
使用git log --graph命令可以看到分支合并图。
分支管理策略:
合并分支时在git merge后加上--no-ff参数使用普通合并模式。合并后的历史有分支,能看出来曾经做过合并;
而fast forward合并就看不出来曾经做过合并。
bug分支:
修复bug时,一般创建新的bug分支修复。最后合并删除。当手头有工作没有完成,不能提交也不想舍弃时,
可使用 git stash 命令将当前境况隐藏,再去分支修复bug。bug修复后使用 git stash pop回到之前隐藏的工作现场。
git stash --隐藏工作现场,暂时去做别的事
git stash apply --恢复工作现场,且stash并不会删除
git stash drop --删除stash
git stash pop --恢复stash的同时把stash内容也删了
git stash list --查看所有的被隐藏的现场。
feature分支:
开发一个新功能,最好新建一个分支。
要丢弃一个没有被合并过得分支,可以使用 git branch -D branchName 强行删除
git branch -D branchNmae --强行删除分支。
多人协作:
git remote --查看远程库信息
git remote -v --显示远程库更详细信息
git push origin master --推送本地分支master到远程库origin
***一般情况下,master是主分支,dev是开发分支,两个都需要时刻与远程同步。自己的bug分
支和feature分支,可以视情况而定
git pull --抓取远程新的提交。自己的分支push失败时,可能是因为远程分支比本地分支新,需要pull下
来进行合并。如果提示no tracking information, 说明本地分支和远程分支没有链接关系,
需要用下面的命令创建。
git branch --set-upstream-to branchName origin/branchName --建立本地分支和远程分支的链接关系
***push时有冲突,在pull下来后,进行冲突合并,再在本地提交,最后将分支推送到远程。
标签管理:
git tag tagName --在当前分支新建一个标签。后面可加commit id来指定标签位置
git tag -a tagName -m "描述" --可以指定标签信息
git tag --查看所有标签
git push 远程库名 tagName --向远程库推送单个标签tagName
git push 远程库名 --tags --推送全部尚未推送的本地标签到远程库
git tag -d tagName --删除本地标签
git push origin :refs/tags/tagName --删除一个远程标签
git自定义玩法:
git可以设置忽略特殊文件
git可以给命令设置别名,简化git命令
可以自己在服务器上搭建git,保证代码的私密性。