git 简要教程-阿里云开发者社区

开发者社区> 开发与运维> 正文

git 简要教程

简介: git太不人性化了,GUI又做的不漂亮。 git 与 github关系? git是一个版本控制工具。 github是一个用git做版本控制的项目托管平台。 git的分支是什么? 答:通过创建分支,软件的各种功能可在相互隔离的分支里开发。这是合理的,不然某一功能的编译不通过都会阻碍其他功能编写人员的开发。各分支开发完后还可以方便地合并到主分支Master中。 各命令的层次图。

git太不人性化了,GUI又做的不漂亮。

微笑git 与 github关系?
git是一个版本控制工具。
github是一个用git做版本控制的项目托管平台。

微笑git的分支是什么?

答:通过创建分支,软件的各种功能可在相互隔离的分支里开发。这是合理的,不然某一功能的编译不通过都会阻碍其他功能编写人员的开发。各分支开发完后还可以方便地合并到主分支Master中。

微笑各命令的层次图。

下图可以新窗口打开并放大看。




代码仓库目录下会有.git文件夹,里面是git工作用到的东西。
HEAD文件:表明当前是哪个分支,并指向对应分支的引用。下行是一个实例:
ref: refs/heads/gh-pages
引用,在refs/heads/下,比如我的github项目下此位置是master、gh-pages两个文件。里面存放的是commit的值,如下行:
8f00dbcaa45b8272d1503b32659ee4c9724f8cc7


执行某个命令,结果太长,想退出,可以用'q'.

git branch
查看所有分支,标(*)的是当前分支
git checkout
要切换到其他分支,可以执行 git checkout <branchname>命令。若要转换到 testing 分支,需要执行下行语句:
git checkout testing。这样 HEAD 就指向了 testing 分支。
checkout只会更改HEAD指向的引用,reset会改变HEAD所引用文件的内容。

git checkout --file //撤销对文件的更改

git checkout otherBranchName -- file1 file2 ...  用其他分支的指定文件来替换当前分支的指定文件。当你 merge 遇到麻烦时,可以这样做,相当于只merge部分文件。

git stash    某个分支修改到一半,想去别的分支上工作,直接checkout,git是不允许的。可以用'git stash'将当前改动暂存。恢复时的命令为'git stash apply'。

git log  查看该分支的改动记录(由新到旧)
git reset --hard commitID   恢复到最近一次提交(别人的提交)后的状态,即放弃上次提交后的所有本次修改。然后与git pull连用,相当于放弃自己的改动。

git reset --hard origin/master   放弃本地修改,强制更新。
git pull   完整命令还需要远端分支名与本地分支名。从远程获取最新版本并merge到本地。

git  add file  //file新增或修改,使用该命令将文件添加到提交列表。

git add -A  //缓存所有改动

git  rm file //file删除,使用该命令将文件删除这一变化添加到提交列表。

git reset HEAD fileName  / /将文件从提交列表中移除。注意此文件的修改不会被撤销。

git rm -rf  theDirectory/    //类似于linux命令中的效果

git commit -m "My Comments"  //提交更改,给出说明

git commit --amend  //追加到上次的提交,不会产生新的commit ID。并且可以修改上次提交的注释信息。通过vim编辑文本文件实现。

git push  //将上次推送后,本地所有已提交的更改推送到远程仓库。有些git连着gerrit(上传审查工具),上传命令是 git push origin master:refs/for/master

查看git中央仓库的网址
$ git remote -v
origin  git@git.dev.sh.ctripcorp.com:octopus/boxexecutor.git (fetch)
git.dev.sh.ctripcorp.com就是,可浏览器访问。

微笑撤销所有未提交的改动.
通过git GUI——分支(Branch)|复位(Reset),然后按照提示照做就好。

通过Bash——git checkout . (注意那个DOT不能省略)

微笑撤销已提交的改动

如果不小心commit了一些不需要commit的文件,可以对其进行撤销。
首先先使用git log 查看 commit日志,找到需要回退的那次commit的 哈希值;然后使用命令git reset --hard commit_id 进行回退。
微笑master与origin的关系?
master就是local branch,origin/master是remote branch。

微笑创建新分支并push到远端仓库

微笑删除远程分支

git branch -r -d origin/branch-name
不成功,发现只是删除的本地对该远程分支的track,正确的方法应该是这样:
git push origin :branch-name
冒号前面的空格不能少,原理是把一个空分支push到server上,相当于删除该分支。(一般情况下管理员不会给你这个权限)
微笑图示变更怎么看?

做以下操作。
1.在master分支上新建一个提交”c1”,生成commit ID 973c,这时候master引用指向973c,HEAD指向master引用。

2.在master分支基础上新建分支”br1”,并在”br1”上提交”c2”,commit ID为1c73,这时候HEAD指向br1,br1引用指向”c2”对应提交1c73.
在分支”br1”上,提交”c3”,commit ID为4927,此时HEAD指向br1,br1引用指向”c3”对应提交4927.

3.我们先切回到master分支,然后新建分支br2,先后提交”c4”和”c5”,对应的ID分别是”86ba”和”063f”,这时候HEAD指向br2,br2引用指向”c5”的对应提交063f。

4.先从br2分支切换到master分支,然后新建分支br3,分别提交”c6”和”c7”,对应的ID分别是”50f1”和”4f9c”,这时候HEAD指向br3,br2引用指向”c7”的对应提交4f9c。

5.先切换到master分支,然后合并br1 br2 br3,会新生成一个提交3b03.
运用git log  –graph查看生成的树状图,如下所示(从上到下为从新到旧)。


从上图分析,从左到右,从上到下。第1条线上的commit顺序是: 3b03→4927→1c73→973c。
第2条线上的commit顺序是:3b03→063f→86ba→973c。
第3条线上的commit顺序是:3b03→4f9c→50f1→973c。
这3条线的从左至右的顺序非常重要,因为HEAD^1对应的就是第1条红线的提交4927,HEAD^2对应的是第2条绿线的063f提交,HEAD^3对应的是第3条黄线的4f9c提交。3b03没有第4个父提交,因此也没有第4条线,这时候访问HEAD^n(n>3)都会报错。
因此从任何一条线上,我们都可以追溯到”c1”的commit,但是每条线上的中间节点,只能通过这条线上的节点去访问。
操作同上类似,最后的状态如下,这时候HEAD指向master,master引用指向”c8”的对应提交3b03。

.gitignore

这个文本文件描述了git的过滤规则,即哪些文件不需要跟踪变化。中央仓库也有对应的.gitignore文件。
比如eclipse项目的build\目录,存放的是编译后的东西,我们不需要保存在git仓库里,就可以在.gitignore文件中加上两行
#ignore build/目录
build/
#开头的是注释。如果build/目录已经追踪了,我们可以git rm -rf build/  //递归强制删除build/目录下的东西
然后提交就可以了。
在本地再次运行eclipse项目,又有build/目录生成,但git已经不报告这里有变化了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章