Skip to content

Latest commit

 

History

History
440 lines (282 loc) · 14.9 KB

Git教程详解(2).md

File metadata and controls

440 lines (282 loc) · 14.9 KB

一、基础操作

这里需要先来配置一下Git的默认编辑器,在修改工程版本的注释和描述时需要用到 我的电脑是Windows系统,想要设置的编辑器是Notepad++ 在目录C:\Users\用户名打开**.gitconfig**文件,向之添加下面一句配置口令,将文件路径修改为自己电脑对应的程序安装路径即可

[core]
	editor = 'C:/Software/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin

还是先在D盘初始化一个仓库test,当前仓库为空

手动创建一个1.txt文件,将之添加到仓库中

git add 1.txt
git commit -m '第一个版本,添加了1.txt文件'

再手动创建一个2.txt,将之添加到仓库中

git add 2.txt
git commit -m '第二个版本,添加了2.txt文件'


之前说过可以用

git log

来查看所有版本信息,其实该命令也可以用来查看指定目录或者文件的日志 查看1.txt的日志信息

git log 1.txt

可以看到1.txt文件只保存有第一个版本时的日志信息,因为在第二个版本时它并没有改动

再来查看2.txt文件的日志信息

同理,2.txt文件则只有第二个版本时的信息


前边说过

git diff

命令可以查看文件的前后变化,准备来说,该命令是可以查看工作区、暂存区、最新提交之间的差别

向1.txt文件手动添加一行内容:111111111111,查看变化

因为此时1.txt文件还未提交到暂存区中,所以该命令查看的是工作区与最新提交之间状态的差别 “+”号表示的是添加的内容 “-”号表示的是删除的内容(这里并没有标示出来,因为只增添了内容)

先将1.txt文件添加到暂存区,再来查看变化

可以看到并没有提示文件差异,因为此时对比的是工作区与暂存区之间的差别,而此时文件内容是一样的

如果想要再查看工作区与最新提交之间差别,可以使用

git diff head

最新提交的内容为空,可以看到对比最新提交还是多出了一行内容

将1.txt文件提交到仓库,并查看版本信息

二、分支操作

master是git默认创建的分支,在进行并行开发的过程中,往往就需要创建多个分支,让多人同时进行开发 不同的分支拥有不同的代码状态,同时进行完全不同的作业,等作业完成后就可以将分支合并

先创建并切换到feature-A分支

git checkout -b feature-A

然后查看当前所有分支

git branch

这两条命令上篇博文也讲到了

可以使用以下命令切换回上一个分支,即master

git checkout -

再切换回feature-A分支 当前1.txt的内容应该只有一行,再增添一行内容,现在完整的内容应该是:

111111111111
222222222222

将1.txt文件提交到仓库

再切换回master分支,查看1.txt文件内容

git checkout master

cat 1.txt

可以看到feature-A分支下的修改对master下的文件并没有影响

再向1.txt文件添加一行内容,此时应为:

111111111111
333333333333

再提交文件

尝试在master分支下合并两个分支的内容

git merge feature-A

可以看到提示说:自动合并失败,请解决冲突后再提交 因为在两个分支下,1.txt文件的第二行都有内容,且内容不同,git不知道该如何合并 而且,此时打开1.txt文件,可以看到内容变成了

111111111111
<<<<<<< HEAD
333333333333
=======
222222222222
>>>>>>> feature-A

提示了冲突的分支和冲突内容,需要我们手动修改该文件内容,然后再提交 将文件内容修改为

111111111111
333333333333
222222222222

向仓库提交文件

有时,采用图表形式输出提交日志看起来可能会比较直观 feature-A分支内容的改变以及合并操作也一目了然

git log --graph

三、修改操作

前边的版本号也比较乱了,这里在Git文件夹下再来重新建立一个新的仓库 然后手动建立一个1.txt文件,文本内容为,将之添加到仓库中

init object git

此时,提交时的描述内容是“第一个版本,添加了1.txt文件”,如果想要修改它,可以使用如下命令

git commit --amend

此时,Notepad++就会被启动,这样就可以来修改其描述内容了,以“#”符号注释的内容可以不用理会

将描述内容修改为

修改完成后关闭编辑器,确认保存即可 再来查询版本信息,可以看到描述内容已经修改了

其实,在提交文件到仓库时,如果想要提交多行描述文本,可以不用加**-m**参数,即直接用

git commit

这样也可以启动Notepad++,就可以输入多行文本了


此时,再将1.txt文件中的“git”单词删去,重新提交

再将“object”单词删去,重新提交

此时的版本号情况

这里只是删去了一个单词,就又多了一个版本号,这里来尝试将最新两个版本号合并

git rebase -i head~2

此时,Notepad++会自动启动

对比上图查询到的版本信息已经描述内容,可以知道前两行内容的意义

这里将73b0cbc的历史记录压缩到e8d6634中,即删除最新一条记录,将之合并到第二条,将前两行文本修改为

pick e8d6634 删去了单词git
fixup 73b0cbc 删去了单词object

退出保存 再来查询当前版本信息

可以看到版本变成了两个,且最新一个版本号与之前两个均不一样,这个是合并后得来的

可此时最新版本号的描述内容也不太正确,因为被删除了的单词有两个,这里再来修改下

git commit --amend

此时,Notepad++就会启动,将描述内容修改为

删去了单词gitobject

退出保存 再来查询版本号信息,已经被正确改动了

四、远程仓库操作

在GitHub上新建一个仓库,命名为GitTest,具体步骤可以参考我上一篇博文,注意不要生成README文件

在GitHub上创建的仓库路径为:https://github.com/initobject/GitTest.git

现在再来将之设置成本地仓库的远程仓库

git remote add origin https://github.com/initobject/GitTest.git

Git会自动将远程仓库的名称设置为origin

然后将本地仓库当前分支下的所有内容推送到远程仓库

git push -u origin master

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

刷新GitHub网页,可以看到代码已经上传到了仓库了 比如我的GitHub仓库:https://github.com/initobject/GitTest

此外,也可以为远程仓库设置分支 现在本地创建一个feature-A分支

git checkout -b feature-A

再将之push远程仓库并保持分支名称相同

git push -u origin feature-A

刷新GitHub网页,可以看到多了一个新分支,而文本内容一样


现在重新创建一个新仓库Git_New,用来从GitHub获取之前提交的内容

远程仓库的地址可以从这里获取

git clone https://github.com/initobject/GitTest.git

可以看到Git_New文件夹下也多了一个新目录GitTest,即是我们之前上传的

可以将所有文件提交到仓库中

git add .  (符号“.”表示增加工作区所有文件到暂存区)
git commit -m '增添了GitTest文件夹'

因为GitTest仓库是从远程仓库clone而来的,此时,GitTest仓库的master分支是与GitHub远程仓库相的master分支在内容上是完全相同的

进入GitTest文件夹

cd GitTest

之前,我为GitTest仓库设置了feature-A分支,这里再来试着将该分支获取至本地仓库,

git checkout -b feature-A origin/feature-A
// feature-A 表示本地仓库要新建的分支名
// origin/feature-A 代表以origin为名的远程仓库的feature-A分支

再来查看当前分支的相关信息

git branch -a

// -a 加上该参数可以同时显示本地仓库与远程仓库的分支信息

切换回master分支,为1.txt文件增添一个单词:object 现在的内容应该是

init object

再查看当前状态

提示1.txt文件未提交 提交该文件,并推送到远程仓库

git push

推送前需要先输入GitHub账户名与密码

刷新GitHub网页,可以看到仓库的描述文本都被改变了


现在再回到一开始使用的Git仓库,即步骤三使用的仓库

重新打开该仓库的方法是进入Git文件夹,鼠标右键点击Git Bash Here即可

因此在之前我们在本地向远程仓库的master分支推送了新内容,本地的仓库是旧的的,这里再来获取远程仓库的最新内容

git pull origin

查看版本变化,可以看到最新版本号就是之前推送的

这样,本地仓库的内容也得到了更新 这种方式方便于进行多人合作开发,一人向远程仓库推送开发内容,另一人获取到本地,修改完成后再提交到远程仓库,也可以在不同分支下分开开发,如此循环反复直至软件培育完成