前记:花了两天时间详细学习操作了 Git 的所有相关,本文暂专注于 Git 应用程序,Github 等使用之后或有补充。
学习出发点:版本控制,是程序员一辈子可以使用的技能,Git是目前最广的 Version Control 工具。
背景介绍:Git 是管理 txt 文件网页程序源码等的改动,对音频视频的详细改动内容无法记录。Git 都是一样的作用,Git lab,Github。前者是基础,是本质,是版本控制工具。后两者提供了更好的UI 平台,用网站/服务器的方式进行展示。
Github 是全球通用最大的版本控制平台,与 Git Lab相比较,主要有两个特点:1. 上传代码默认全部开源,除非购买会员(Gitlab 仅对设定参与人群显示);2. Github 本身不是开源项目(Github 开源,所以可以自己在基础上搭建 Gitlab 服务器,而且不需要外部 Denpendency 支持)
学习 Git 最佳网站:Link1(官网), Link2(廖雪峰老师官网)。
开始。
关键词理解:working directory,Repository 包含 stage(执行缓存区)以及 各个分支(master 等)
Git Bash 是基于命令的控制台,以命令为线索进行延伸。
$ git init 说明:初始化Git 根文件夹 $ git add 说明:working directory有任何改动后,使用 git add 将改动同步到执行缓冲区域等待执行 $ git commit -m“添加的注释” 说明:仅执行缓冲区域的改动,所有 add 还没有 commit 的修改都会被写入 branch。没有 add 入 stage 的文件改动不会执行。 $ git status 说明:查看 working directory 内各文件的执行状态。没有add操作的文件也会有 untracked 的显示记录。 $ git diff $ git diff HEAD --文件名 说明:显示 working directory内文件内容修改,方便 git add 之前查看文件变化。HEAD --文件名可以指定目标文件。 $ git log 说明:显示所有commit 提交,包含 commit id,之后可以优化界面。 git log --pretty=oneline --abbrev-commit $ git checkout $ git checkout --readme.txt 说明:撤销动作。如果文件在 directory 修改,则恢复到最近一次commit的状态);如果在 stage 修改,则恢复到最近一次add的状态 git rm text.txt;git checkout -- 文件名 说明: 删除之后恢复命令。只要提交到了版本库,永远不用担心存在误删,只能恢复最近一次 commit 的状态。 $ git remote add origin(远程 git 名称设定) git@git.com:martinchansmiling/master.git 说明:添加远程库(需要先在 github 等创建 branch)注意不要完全复制远程库的url,有改动 $ git push -u origin(远程git名称) branch(分支名称) 说明:创建并第一次推送到远程库的分支 $ git clone git@github:martinchansmiling/master.git 说明:clone 远程 git 文件,后面的内容和remote add git 后的内容格式一致。clone 下载内容地址就在 git bash 当前所在位置。ssh支持的原声 git 协议的复制速度最快,有时会强制要求使用 http 协议进行 clone. $ git -branch branchname 说明:建立分支。 $ git checkout branchname 说明:切换分支。 $ git -checkout -b branchname 说明:建立并切换到该分支。切换的方式就是改变当前指针位置。 $ git branch -d branchname 说明:删除分支 $ git branch 说明:查看所有分支内容 $ git merge branchname 说明:首先切换到要 merge 的分支上,如 master,之后执行 merge 操作。一般 merge 之后就可以删除分支了。merge之后被 merge 的分支的 log 记录会合并在 master 分支的 log 中。 注意:一般 merge 分支的时候,可能提示出现 conflict,处理的方式是进入文件进行手动修改,再执行 add 和commit 操作。 $ git log 可以查看所有执行过程。 $ git --no-ff merge branchname 说明:正常 merge 不会产生 commit 操作, $ git merge --no-ff -m"merge with no-ff‘ dev 说明:--no-ff合并禁止了普通 merge 的合并,会产生一个 commit 操作,因此需要添加-m"" 补充说明 注意:错误提示如”can not do a partial merge.“,一般是两个 branch 发生冲突,首先解决冲突,之后使用命令 git -i add readme.txt (The -i flag is used mostly for when you are concluding a merge.) $ git stash 说明:存储当前branch编辑状态,等待恢复编辑。git status查看无任何需要提交任务。 $ git stash list 说明:查看所有 stash list 记录 $ git stash apply 说明:回归工作 branch 之后使用该命令进行恢复 status 状态,继续编辑。不删除 stash 记录 $ git stash drop 说明:删除 git stash 记录 $ git stash pop 说明:恢复并删除 git stash 记录 $ git stash apply stash@{序列号} $ git branch --set-upstream branchname origin/branchname 说明:立本地与远程库的链接。最好统一本地branch和远程 branch 的名字。 注意:多人协作工作模式:git push origin branch-name; 如果推送失败,说明有 conflict,因为远程分支比本地有修改,用 git pull 合并;合并之后如果有冲突,在文本中解决冲突并 add commit 操作;再 git push origin branch-name $ git tag versionNo 说明:给 commit 索引加 tag,方便查询。类似 DNS 给 ip 地址加域名。 $ git tag 说明:查看所有tag信息 $ git log --pretty=oneline --abbrev-commit 说明:查看所有 log 信息中的 indexNo $ git tag versionNo commitNo 说明:给指定的 commit No 指定 tag $ git tag -a versionNo -m"description message" commitNo 说明:给指定的 commit No 指定 tag 并添加说明 $ git show $ git show tagNo 说明:查看所有/指定 tag 信息 $ git tag -d versionNo 说明:删除指定tag $ git reset --soft tagversion/commitNo $ git push origin v1.0 $ git push origin --tags 说明:推送所有/指定 tagNo 到远程 $ git add -f readme.txt 注意:可以在 git 根目录下加入.gitignore文件,放入忽略的文件名称。之后忽略文件在git status中不会出现 unchacked 标示。-f命令用来强行对忽略文件进行操作。 $ git config --global alias.nickname originOrder 说明:给原始命令起别名,方便操作。
对于 Git 的基本操作大致如上。
PS:
注意掌握任何技能的学习过程:
知道:学习和接受知识理论
订制:搭建自己的知识框架,寻找真正对自己有帮助能提高的部分,订制为属于自己的内容。
实践:最重要的过程。
复盘:实践结束,有了输出就代表没白学!给自己一个正反馈。通过实践升华理论,优化个人知识框架和使用体会。