Git基础操作
在现有目录中初始化仓库
用 Git 来对现有的项目进行管理,需要进入该项目目录并输入:git init
该命令将创建一个名为 .git
的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。如果你是在一个已经存在文件的文件夹(而不是空文件夹)中初始化 Git 仓库来进行版本控制的话,你应该开始跟踪这些文件并提交。 你可通过 git add 命令来实现对指定文件的跟踪,然后执行 git commit 提交:
git add .
git commit -m 'initial project version'
文件状态演变
# 查看文件、文件夹状态 git status
未追踪状态 (Untracked):新创建的文件属于未追踪状态(Untracked),git不会对未追踪的状态的文件进行管理。
放入暂存区未提交状态(Staged) :通过 git add 用于跟踪新文件,把文件新增的变动暂存(stage)起来。git add也可以把已跟踪文件的修改和删除的变动暂存。
已提交未修改状态(Unmodified) :通过 git commit 对暂存的变动进行提交,文件变成已提交尚未修改状态(Unmodified)。
提交后被修改状态 (Modified):对于已提交未修改的文件,被修改后变成已修改状态(Modified),需要通过 git add命令把修改的变动暂存之后才能提交。比如
git add .
git commit -m "提交文件的修改"
也可以直接提交,但需要加上-a参数, 上面的操作等同如下操作
git commit -am "提交文件的修改"
对于已提交未修改的文件,被删除后变成已修改状态(Modified), 需要通过git add 命令把删除的变动暂存,之后才能提交。 比如
rm index.html
git add .
git commit -m "文件删除"
也可以直接提交,但需要加上-a参数, 上面的操作等同如下操作
rm index.html
git commit -am "提交文件的修改"
问:git add 与 git commit -a 有什么区别?
答:对于已提交未修改的文件,文件的编辑、删除都会使其变成已修改状态。可以通过 git add暂存变动,再 git commit。也可以直接通过 git commit -a 一次性暂存变动并提交;
于未追踪文件的新增,只能通过 git add 来暂存新增变动,之后在 git commit 提交。
移除文件
git rm readme.md : 把readme.md文件移除的这个变动暂存,并且本地也删除 readme.md文件
git rm --cached readme.md : 把readme.md文件移除的这个变动暂存,但本地保留readme.md文件(该文件变成未追踪状态)。
git rm -f readme.md:对于被提交后做了修改(处于已修改状态)的文件,想把文件移除的变动暂存必须加 -f参数
场景一:从 Github clone一个仓库到本地,在仓库目录删除 readme.md,之后把变动同步到Github。
# 删除文件
rm readme.md
# 把变动暂存
git add readme.md
# 提交变动
git commit -m "删除readme.md "
等同于
# 删除文件
rm readme.md
# 用快捷方式把变动暂存并提交变动
git commit -am "删除readme.md"
等同于
# 删除文件,同时把删除的变动暂存
git rm readme.md
# 提交暂存的变动
git commit -m "删除readme.md"
场景二:小A在提交代码时不小心把一个用于本地测试的数据库文件 database 一并提交并推送到Github,导致Github源码体积增加几百M。现在他需要在仓库中删除database文件,但本地依然保留该文件(本地开发需要)。
# 本地保留database, 把删除的变动暂存
git rm --cached database
# 提交变动。注意:此地不需要执行 git add .
git commit -m "删除无关文件"
touch .gitignore
echo database > .gitignore
git add .
git commit -m "添加.gitignore"
git push origin master
总结
以下两个命令能满足绝大多数使用场景:
git add .
git commit -am "bug fix"
远程仓库操作
git clone git@github.com:xxx/xxx.git 会把远程仓库完整的信息克隆到本地。
使用 git remote -v查看远程仓库信息。
远程仓库地址默认的名字叫 origin。
# 添加信息的地址
git remote add origin git@github.com:jirengu/test.git
git remote add gitlab git@github.com:jirengu/test.git
# 修改地址
git remote set-url gitlab git@github.com:jirengu/demo.git
# 删除地址
git remote remove gitlab
# 推送项目
git push origin master
git push gitlab master