git入门
在平常的工作中虽然一直在使用git作为项目管理的工具,但一直使用的就是
git add
、git commit
、git pull
和git push
,没有做检测,因此一直会把一些不应该同步的文件同步,或者提交一些脏代码,使得原本能执行的程序,变得不能执行。这不能是用简单的粗心能够说明。一是自己对git中的命令不熟悉。二是没有一个好的代码提交习惯。
工具
我使用git命令练习是使用githug
这个游戏。
安装
这个游戏是使用Ruby
语言编写的,可以通过:sudo gem install githug
进行安装
如果,没有安装Ruby
使用:sudo apt install ruby
(针对 Ubuntu 16.04) ,如果是其他版本把apt
替换成apt-get
即可。
安装完后输入githug
,然后输入y
出现如下界面:》
然后进入git_hug
文件夹准备开始游戏。游戏的玩法可以通过说明查看。
Git命令
init
Git 的init
命令用于创建一个空的Git仓库或者重新初始化一个已经存在的仓库。但是讲道理这个命令很少用到,除了上次在AWS上搭建Blog时使用到了一次。
config
config
命令通常是用于配置git的一些属性,同过git config
,可以发现 config
下带如下参数:
但比较常见的做法是设置自己的邮箱和用户名
git config --global user.name "hsulei"
git config --global user.email "466977183@qq.com"
add
add
指令通常用于添加文件索引到库中,git add .
或者git add xxx
(xxx为指定文件名)
commit
commit
命令用于将以及add
的文件添加到库中。在每次提交的时候需要使用-m
后面添加上提交的信息。用一种情况是当提交完成之后,突然发现了漏了一些文件没有提交。很多的做法是在单独提交一次。但是这样是不合理的,在这种情况下可以使用--amend
子命令:
git add a.txt
git commit --amand
在commit
的时候可以带时间。使用--date
参数
git commit -m"add date" --date "2016-12-2 23:23:23"
clone
clone
用于克隆一个仓库到本地。
git clone xxx //xxx为具体的仓库地址
git clone xxx location //xxx为具体的仓库地址,location为要clone到的本地库路径
.gitignore
这不是一个命令。在所有的git仓库中都会有一个.gitignore
文件,这个文件是用来控制一些文件不应该添加到git仓库中的忽略文件。在.gitignore
文件中填写要忽略的文件的路径,就可以在下次提交时,将这些文件忽略掉。比如写Android的一些编译文件。在.gitignore
中可以忽略一类文件。例如使用vim
编辑后产生的.swp
文件。在.gitignore
中添加:
*.swp
但是有时候在忽略一类文件的时候,需要提交某一个特定的文件,比如忽略所有的.a
文件,但是,需要提交lib.a
文件,此时我们就可以在.gitignore
文件中这样写:
*.a
!lib.a
status
使用 git status
命令可查看提交的记录,可以看到哪些文件提交了,哪些文件还没有添加到库中:
绿色的部分是已经被git追踪到的,红色的还没有提交到库中的。
rm
git rm
用来告诉git ,需要将哪些文件从仓库中删除,同时将这个操作记录下来,如果只是简单的rm
只是将该文件从物理硬盘上删除,但是没有将其从git记录中删除。
stash
有时候,做了修改,但是突然来了命令,要紧急需改bug,那这次的修改不能提交。可以用stash
命令将当前的修改暂存,当bug修改完成并且commit
了之后,在使用git stash pop
命令恢复,继续新功能开发。
mv
mv
移动或重命名一个文件、目录或符号连接,比如,我们想把一个old.txt
重命名成new.txt
,此时我们就能使用:
git mv old.txt new.txt
log
log
通过该命令,可以查看代码的提交记录。
tag
tag
通过该命令,可以添加一个标签,但是在提交的时候,git是不会自动提交该标签的,需要在使用push
,命令的时候添加--tag
参数。
reset
reset
可以将错误提交的文件取消提价状态 :
git reset xx
reset
可以将当前地 HEAD
重置到制定的位置,如果希望变更保持在staging area
,那么就添加--soft
checkout
checkout
有很多的左右:
- 撤销变更
- 切换分支
git checkout xxx //xxx为要撤销的文件名称
git checkout -b xxx //xxx为分支名
git checkout xxx //xxx为tag名称
remote
remote
命令可以查看当前的仓库。
git remote
使用-v
子命令可以查看查看的URL地址。
可以使用add
子命令,添加一个仓库的地址。
git remote add xxx //xxx为仓库的url地址
pull
pull
命令用于从仓库中拉取数据。
push
push
用于向指定的仓库中提交数据。
rebase
rebase
命令也是用于合并,但是这个合并和merge
命令不同。?
diff
diff
命令用于查看改动变化:
git diff xxx //xxx为要查看的文件名
使用了该命令后的效果如下:
在修改的地方使用了不同但是和标记来表示:红色表示删除的,绿色的表示添加的。
blame
blame
命令用于查找文件每个部分是有谁修改的
branch
branch
命令用于拉取分支。如果忘记开启新的分支就修改并提交了代码,也是使用branch
带指定参数,使新的分支基于任意一次提交:
git branch test HEAD
使用-d
参数就可以删除一个分支。
merge
merge
指令用于合并分支
git merge test
fetch
fetch
指令将更新的代码拉回本地,但是不进行合并。