此操作均是在Windows下进行,有关软件安装,请移步此处※※
首先鼠标在桌面空白地方右键选择Git Bash here
,然后cd
到所要进行版本控制的文件夹。另外一种方法比较简单,直接选中目标文件夹,右键文件夹,选择Git Bash here
,出现git的命令行界面。如下图:
这里已经在桌面创建了一个名为git_test的文件夹,文件路径建议全部使用英文,不要出现中文,避免出现不必要的bug。
在命令行界面输入以下命令
git init
创建成功后出现以下界面
打开文件夹,会发现git_test目录下回多出来一个.git
的文件夹(默认是隐藏状态,需要设置才可见,但在bash中输入ls -ah
命令也可见到),这个文件夹就是Git用来进行管理版本库。千万不要随意修改!!!
接着在git_test文件夹下建立了一个新的文件cmd_test.txt
。因为是在Windows下测试,所以此处需要注意不要用自带的记事本编辑文本。因为Windows的记事本会在每个文件的开头添加0xefbbbf(十六进制)的字符,这样会出现很多意外的问题。所以这里是用Notepad++代替记事本打开的,当然也可以在bash中用命令:vim cmd_test.txt
打开。
现在开始提交版本:
第一步:输入命令git add cmd_test.txt
,把文件添加到仓库,或者使用git add .
添加所有文件
git add cmd_test.txt
添加所有文件
git add .
有时候会用到只添加某一类型的文件,如只添加所有的txt
格式的文件,类似Linux命令中的操作,命令如下:
git add *.txt
执行上面的命令后,没有任何显示,即表示添加成功
第二步:输入命令git commit -m "描述此次提交的说明"
将文件提交到仓库。这里的-m
表示此次提交的说明
git commit -m "首次创建仓库"
执行结果如上图:注意这里方括号中的字符:e358c12,这个字符串很重要,后面再提会用到; 1 file changed
表示一个文件被改动;2 insertion
表示插入了两行内容,此处示例写的是:
git init;
创建版本库
至此版本仓库的创建和提交操作就结束了。以后每次提交都需要按照此步骤执行,先添加(add操作)文件,再提交(commit操作)到仓库。
使用命令git log
可查看当前分支的历史提交记录列表
git log
使用命令git log --follow file
可查看当前分支的历史提交记录,例如这里查看文件cmd_test.txt的历史提交信息列表
git log --follow cmd_test.txt
有时候在修改程序后,程序的的内容发生了很大的变化,但修改用来可以运行的程序又十分复杂。这时版本回退如时光穿梭机一样,可以跳转到任何已经提交的的版本。其命令如下:
git reset --hard [commit]
这里的commit可以是分支名称,也可以是刚才提到的那个字符串,一般填字符串,因为每次提交都会产生不同的字符串。如下图所示,修改文件,添加了两次提交:
此时用git log
查看提交的信息如下:
这里可以看到,总共提交了三次,每次的commit id是不一样,这就方便跳转到任何版本。比如这时跳转到添加一次提交:
git reset --hard 08228
输入id的前面几位即可,Git会自动找到id,执行结果如下图:
这里HEAD可以理解为一个指向当前版本的指针,而id则是地址,每次跳转则是HEAD指向不同的地址位置。这个方法就适用于当我们代码改错了,或者内容发生很大变化,此时想复原以前的程序时,使用此方法就可轻松的实现复原,当然前提要有提交。
如果在退回到第一次提交后,吃个饭回来,发现第二次提交的程序可能只是某个地方的小问题,回去改一下就行,这时怎么办?还是利用Git强大的时空穿梭功能。从当前的第一次提交状态,跳转到第二次提交的状态。此时按照上述步骤先用git log
查看提交的信息,执行结果如下:
发现和上次的日志信息不一样,这里没有第二次提交的日志信息,这时找不到id,没办法跳转。此时可使用git reflog
命令查看提交记录
git reflog
执行结果如下:
这里可以查看每次操作后的情况,也找到第二次提交的id 236ecab
,再次利用reset操作再回到第二次提交的状态:
git reset --hard 236ecab
在Git中,master为主分支,当我们每次提交到master后,master分支的线也越来越长。当多人合作开发一个程序时,若都在master里面开发,这个分支会越来越长,而且随着提交次数的增多,版本越来越多,可能会出现找不到哪个是自己提交的版本。对此通过Git的分支功能,再给每个人分配一个分支,每个人在所分配的分支完成其功能后,最后合并到主分支,这样就不会相互影响,从而提高开发效率。
使用命令git branch branchname
来创建分支branchname
,示例如下,这里创建名为branch1
的分支:
git branch branch1
使用git branch
来查看分支
git branch
使用git branch -d branchname
来删除分支branchname
git branch -d branch2
执行结果如下:
这里首先创建了branch1
和branch2
,接着使用git branch -d branch2
删除了branch2
,然后查看当前分支列表,可见分支branch2
已经被删除。
注意上图中蓝色的字符:(master),括号中的字符串表示当前工作的分支,当前是master分支。切换到branch1
分支命令如下:
git checkout branch1
切换到branch1
分支后,在此分支的操作和在master中的操作均一样。为了方便后续演示,我在文件夹下添加了cmd_test1.txt
这个文件。然后执行添加文件,提交版本。提交成功后branch1
分支有两个文件。
接下来我们切换到master分支,然后用命令ls
查看文件,会发现此时master分支中不包含刚才添加的cmd_test1.txt
这个文件,这也说明了在其它分支中修改、添加文件,不会改变主分支的状态。执行结果如下:
从图中可发现,切换分支后蓝色的字符都在变化,即显示当前工作的分支。
若在分支中完成功能后想合并到另外一个分支,如将branch1
合并到master
主分支。首先切换到目标分支(master),然后输入命令:git merge branchname
,branchname
为被合并的分支名称,示例如下:
git checkout master
git merge branch1
执行结果如下图,可以看到,此时master
分支下已经包含cmd_test1.txt
文件
此时再使用git log
查看日志信息如下图,日志信息已更新,显示合并的分支中提交的内容:
TortoiseGit操作以及命令行其他操作后续补充