GitHub -- Git操作

来源:互联网 发布:卡尔曼滤波算法应用 编辑:程序博客网 时间:2024/05/19 15:45

git init - 初始化仓库

要使用Git进行版本管理,必须先初始化仓库。Git是使用git init命令来进行初始化的。

mkdir git-tutorialcd git-tutorialgit init

如果初始化成功,执行git init命令的目录下就会生成.git目录,这个.git目录会存储着管理当前目录内容所需的的仓库数据。在Git中,我们将这个目录的内容成为”附属于该仓库的工作树“,文件的编辑等操作在工作树中进行,然后记录到仓库中,以此管理文件的历史快照。

git status - 查看仓库的状态

git status 命令用于显示Git仓库的状态。

git add - 向暂存区中添加文件

如果只是用Git仓库的工作树创建了文件,那么该文件并不会被记入Git仓库的版本管理对象中,因此我们用git status命令查看README.md文件时,它会显示在Untracked files里。而使用git add命令将其加入到暂存区中,暂存区只是提交之前的一个临时区域。
git add README.mdgit status

git commit - 保存仓库的历史记录

git commit命令可以将当前暂存区的文件实际保存到仓库的历史记录中,通过这个记录,我们可以在工作树中复原文件。
git commit -m "First commit"

如果想要记述更加详细的信息,不加-m,直接执行git commit命令,执行后编辑器就会启动记录提交信息。按格式填写

如果在编辑器启动后想中止提交,将提交信息留空并直接关闭编辑器,随后提交就会被中止。

执行完git commit后,用git status查看当前状态。

git log - 查看提交日志

git lot命令可以查看以往仓库中提交的日志,包含查看什么人什么时候进行了提交或合并,以及操作前后的差别。git log命令运行后,可以看到刚才的git commit命令是否被记录了,commit栏旁边限时"94fs129..."是指想这个提交的哈希值,Author栏限时我们给Git设置的用户名和邮箱地址,Date栏中显示执行的日期和时间,再往下就是提交的提交信息。

只显示提交信息的第一行
git log --pretty=short

只显示指定目录,文件的日志
git log README.md

显示文件的改动
git log -p  README.md

git diff - 查看更改前后的差别

git diff 命令可以查看工作树,暂存区,最新提交之间的差别。

1。用Markdown语法写下一行题目
#Git教程

2。查看工作树和暂存区的差别
git diff
显示+#Git教程,”+“号代表新添加的行,被删除的行用”-“号标出。

3。查看工作树和最新提交的差别
git diff HEAD

在执行git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间的差别,等确认完毕后再进行提交。这里的HEAD是指向当前分支中最新一次提交的指针。

分支的操作

在进行多个并行作业时,往往同时存在多个最新代码状态,我们会用到分支,每个分支中都拥有自己的最新代码。master分支是Git默认创建的分支,因此基本上所有开发都是以这个开发为中心进行的。不同分支中,可以同时进行完全不同的作业,等该分支的作业完成之后再与master分支合并。通过灵活运用分支,可以让多个人同时高效地进行并行开发。

git branch - 显示分支一览表

git branch命令可以将分支名列表显示,同时可以确认当前所在分支。

git branch
* master
可以看到master分支左侧有个*号,表示这是我们当前所在的分支,即是说我们正在master分支下进行开发,结果没有显示其他分支名,表示本地仓库只存在master一个分支。

git checkout -b  - 创建、切换分支

如果想在当前的master分支为基础创建新的分支,需要git checkout -b命令

创建名为feature-A的分支,并将当前分支切换为feature-A分支。
git checkout -b feature-A

在这个状态下像正常开发那样修改代码,执行git add命令并进行提交的话,代码会提交至feature-A分支,不断地对一个分支进行提交的操作,称为“培养分支“

git checkout master 切换到master分支。feature-A分支不会对master分支造成影响。

“git checkout -”   切换回上一个分支,用”-“代替分支名。

特性分支

Git与集中型版本管理系统不同,创建分支不需要链接到中央仓库。因此,当今大部分工作流程中都用到了特性(Topic)分支。特性分支,是集中实现单一特性(主题),除此之外不会进行任何作业的分支。在日常开发中,往往会创建数个特征开发,同时在此之外保留一个可以随时发布软件的稳定分支,这个通常是master分支。即便在开发过程中出现BUG,特性分支也需要在创建新的分支,在新的分支中进行修正。

特性分支的主题完成后,再与master分支合并。保持这样的一个开发流程,就能保证master分支可以随时供人查看。其他开发者也可以放心地从master分支创建新的特性分支。

主干分支

主干分支是特性分支的原点,同时也是合并的终点。通常以master分支作为主干分支,主干分支可以有多个。

git merge - 合并分支

首先切换到master分支,然后合并feature-A分支,需要创建合并并提交,在合并时加上--no-ff参数。

git checkout master
git merge --no-ff feature-A
随后编辑器会启动,用于录入合并提交的信息。默认信息已经包含了feature-A合并的内容,不必做任何更改,将编辑器现实的内容保存,并关闭编辑器。这样就把feature-A分支的内容合并到master分支中了。

git log --graph - 以图表形式查看分支

用git log --graph命令可以查看特性分支的创建以及合并,可以用图表形式输出提交日志,非常直观。

更改提交的操作

git reset - 回溯历史版本

要让仓库的HEAD、暂存区、当前工作树回溯到指定状态,需要用到git reset --hard命令,只要提供目标时间点的哈希值,就可以完全恢复至该时间点的状态。

git reset --hard fd0cbfod4a.....
HEAD is now at fd0cbfo Add index

成功回溯到特征分支(feature-A)创建之前的状态,所有文件的内容也恢复到了当时的状态。创建fix-B,然后想在主干分支合并feature-A分支修改后,有合并fix-B的修改。
1.首先恢复feature-A分支合并后的状态,使用git reflog命令查看当前仓库的操作历史,找出回溯历史之前的哈希值
2.通过git reset --hard命令恢复到回溯历史前的状态。
3.现在合并fix-B分支,就可以得到我们想要的状态。但是用git merge --no-ff fix-B后,系统会告诉我们README.md文件发生了冲突(comflict)feature-A分支更改后部分与本次想要的fix-B分支更改的部分发生了冲突,我们要解决冲突。
4.更改解决了冲突后,提交信息。

git commit --amend - 修改提交信息

git commit --amend命令可以修改上一条提交信息。

git rebase -i  - 压缩历史

git rebase命令,可以选定当前分支中包含HEAD(最新提交)在内的两个最新历史记录为对象,并在编辑器中打开。

git rebase -i HEAD-2
打开两次最新提交的历史记录,将要删除的6fba227删除,把6fba227左侧的pick部分删除,改写为fixup即可。完成更改,再合并到master分支。

推送至远程仓库

在GitHub上新建一个仓库,仓库名最好与本地仓库保持一致。

git remote add -添加远程仓库

在GitHub上创建的仓库路径为:“git@github.com:用户名/git-tutorial.git",现在用remote add命令将它设置为本地仓库的远程仓库。

git remote add origin git@github.com:WeiLinChancwl/git-tutorial.git
Git会自动的将远程仓库的名称设置为:origin(标识符)。

git push - 推送至远程仓库

1.推送到master分支
把当前分支上本地仓库中的内容推送到远程仓库。例如,在master分支下进行操作:
git push -u origin master
当前分支的内容就会被推送到远程仓库origin的master分支。-u参数可以在推送的同时,将origin仓库的master分支设置为本地仓库当前分支的upstream(上游),添加了这个参数,将来运行git pull命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从origin的master分支获取内容,省去了另外参数的麻烦。

2.推送至master以外的分支
在本地仓库中创建了feature-D分支
git checkout -b feature-D
将它push给远程仓库并保持分支名称不变。
git push -u origin feature-D

从远程仓库中获取

git clone -获取远程仓库

git clone git@github.com:WeiLinChancwl/git-tutorial.git

执行git clone命令后,我们会默认处于master分支下。
1.获取远程的feature-D分支
git checkout -b feature-D origin/feature-D

2.向本地的feature-D分支提交更改
git diffgit commit -am "Add feature-D"

3.推送feature-D分支
git push

git pull -获取最新的远程仓库分支

git pull origin feature-D









原创粉丝点击