Git版本控制工具的简单使用

虽然在Windows系统上安装的Git是可以在图形界面上进行操作的,但是我们并不应该这么做,Git的各种命令才是我们应该掌握的,而且将来我们不管换成什么样的操作系统,使用Git命令来操作都是通用的

1. 创建代码仓库

初次打开Bash的时候我们应该配置身份

1
2
git confing --global user.name "yourname"
git confing --global user.email "your email address"

然后切换到你要上传到github的项目的根目录下,例如下面这个项目:

1
2
cd f:
cd android/BroadcastTest/

然后输入下面的命令:

1
git init

这样会在BroadcastTest目录下生成一个 .git 文件夹

2. 提交本地代码

1
2
3
git add AndroidManifest.xml   # 将AndroidManifest.xml文件添加进本地仓库
git add src # 将src目录添加进本地仓库
git add . # 添加所有的文件到本地仓库

上面的添加只是将文件/文件夹添加到本地仓库,并没有提交:

1
git commit -m "first commit" # 其中"first commit"是本次提交的描述,建议加上此次提交的描述,将来我们可以很方便的看到提交了什么

3. 忽略文件

我们提交的时候,并不是该项目下所有的文件都得提交,例如 .idea 文件夹是不需要提交的,它是IDE自动生成的,那么怎么忽略掉这些文件呢?

第一步: 在BroadcastTest目录下创建 .gitignore文件

注意可能你在创建该文件的时候提示你”必须键入文件名,解决方法是:

  1. 在项目根目录下面创建gitignore.txt文件
  2. 把你需要排除的文件名保存到gitignore.txt文件
  3. 在项目根目录下面按住Shift键并鼠标右键选择“在此处打开命令窗口”
  4. 执行命令 ren gitignore.txt .gitignore

第二步:编辑.gitignore文件,将你想要忽略提交的文件或者文件夹加入

例如:

1
2
3
bin/
gen/
*.html # 忽略所有的html文件,其中 "*" 为通配符,表示任意多个字符, "?" 代表一个字符, 方括号 [abc]代表可选字符范围

编辑好上面的.gitignore文件以后,执行 git add .就会自动将匹配上的文件或者文件夹忽略,然后执行

git commit -m "Second commit with ignore" 大功告成!

4. 查看修改内容

在项目的开发阶段我们经常提交代码到仓库,理想的情况是每当完成了一小块功能的时候,就执行一次提交.当某个功能修改比较多的时候,写到后面可能我们已经忘记了本次到底修改了什么内容了,此时Git在帮你记着.

git status 查看本次更改的概况

git diff src/lee/com/broadcasttest/Main.java 查看某个文件具体修改的内容,其中,减号代表删除的内容,加号代表添加的内容

5. 撤销未提交的修改

每次完成一个功能以后,都会先执行 add命令添加进本地仓库

本次代码修改以后,只要未提交(也就是未执行add命令),都可以运行

git checkout src/lee/com/broadcasttest/Main.java 来撤销更改

上面的命令只能针对那些没有执行过add命令的文件有效,当某个文件已经add过了,此时需要先对其进行取消添加

git reset HEAD src/lee/com/broadcast/Main.java,然后在执行上面的

git checkout src/lee/com/broadcasttest/Main.java命令

6. 查看提交记录

git log

当我们的提交较多的时候,可以指定该记录的id:

git log 提交记录的id -1(注意这里要添加上-1)

在命令中添加-p参数,查看该条记录具体修改的内容:

git log 提交记录的id -1 -p

7. 分支的用法

git branch -a 查看当前的版本库中有哪些分支,版本库创建的时候默认只有一个分支 master

git branch version1.0 创建一个名为 version1.0 的分支,虽然此时创建了一个新的分支version1.0,但是当前你所在的分支依然是master,使用下面的命令进行切花分支

git checkout version1.0 切换到version1.0的分支上

当你想把version1.0分支上所做的修改合并到master分支上,使用下面的命令进行

1
2
3
git checkout master   # 先切换到master分支上
git merge version1.0 # 合并merge分支上的修改到master分支上,此时version1.0分支上的代码不会受到影响
# 另外,合并分支的时候可能会出现代码冲突的情况,此时应该慢慢查找那些冲突的代码,git 无力帮助我们

git branch -D version1.0 删除version1.0的分支

8. 与远程版本库协作

上面的操作都是在本地完成的,只适合个人作为项目版本的控制方法

所有的版本控制工具最重要的一个特点就是可以使用它来进行团队合作开发,每个人的电脑上都会有一份代码,当团队的某个成员在自己的电脑上编写完成了某个功能后,就将代码提交到服务器,其他的成员只需要将服务器上的代码同步到本地,就能保证整个团队所有人的代码都相同.这样的话,每个成员就可以各司其职,完成每个人负责的模块,这样就可以共同完成一个庞大的项目.

现在,项目负责人在Git上创建了一个项目,项目地址为:https://github.com/BlueLeer/Crawler

将代码下载到本地:

1
git clone https://github.com/BlueLeer/Crawler.git

之后,当你在这份代码的基础上完成了一些修改,使用下面的命令将本地修改的内容同步到版本库:

1
git push origin master  # 注意:该命令应该在上面本地代码根目录上执行,origin指的是远程Git地址,master指的是master分支,当然也可以是其他的分支

团队的其他成员对Git版本库中的代码也进行了修改,我们应该要养成经常从版本库中获取最新代码的习惯,那么怎么讲远程版本库中的修改同步到本地呢?使用下面的命令:

1
2
3
git fetch origin master 
# fetch意为获取之意,但是注意:同步下来的代码并不会合并到本地的任何分支上,而是会存放在一个 origin/master
# 分支上,此时可以先调用 git diff origin/master 查看远程版本库中到底修改了什么内容

之后调用 merge命令将origin/master分支上的修改合并到本地的master分支上即可:

1
git merge origin/master

推荐使用上面的方法,当然下面的方法更简单,一步到位,那就是pull命令了,它其实相当于将fetchmerge两个命令放在一起执行了,它从远程的版本苦衷获取罪行的代码并合并到本地:

1
git pull origin master

9.上传本地项目到代码仓库

步骤:

  1. 在待上传的项目根目录下执行(会生成一个.git目录):git init
  2. 添加文件到本地仓库:git add .
  3. 提交到本地仓库:git commit -m "提交到本地仓库"
  4. 建立和远程仓库的联系:git remote add origin git@github.com:BlueLeer/SSHMerge.git
  5. 执行git add .(为什么需要执行这一步呢?因为在和远程版本库建立联系以后,本地文件改变了,此时还没有添加到本地仓库,可以利用gin status来查看)
  6. 执行git commit -m "和远程版本库建立联系以后的再次提交"
  7. 关键的一步,将远程仓库的文件pull到本地,并和本地的合并,普通的合并是git pull origin master,但是,注意啦,这里的拉取合并指令为:git pull --rebase origin master
  8. 上传:git push origin master

10.其他

  • git配置账号信息
    • git config:局部
    • git config –global:全局
  • git log:查看操作日志(常用)
  • git status
    • 文件显示红色:未被git管理
    • 文件显示绿色:已被git管理
  • git命令别名设置(原生命令为主)
  • git版本回退
    • git reset –hard head^ 回退到上一个版本
    • git reset –hard 哈希值(前7位)
    • git reflog:查看历史操作记录
  • git模拟多人开发
    • 有可能存在冲突问题.例如:A操作并且提交代码后,B没有更新,直接操作最后push到远程的版本库(拒绝访问).正确的做法是,提交之前先pull最新的代码到本地并合并,然后解决冲突文件,然后提交到本地版本库,最后再进行提交到远程仓库.

参考:github入门到上传本地项目

注意:此博客中操作步骤可能会导致问题