仓库初始化
目录中新建git仓库
$ git init
拷贝一个Git仓库到本地
$ git clone [url]
比如这样
$ git clone https://gitee.com/daifylearn/gitlearn
Cloning into 'gitlearn'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
拷贝一个Git仓库到本地,并且设置其文件夹名称,可以这么操作
$ git clone https://gitee.com/daifylearn/gitlearn gitnewname
这样拉取代码后,git就会创建一个gitnewname文件夹,然后保存进去
另外一种方式
除了上面那种方式拉取代码还可以使用这种方式
$ git clone user@server:/path.git
代码操作
保存工作区代码修改到暂存区
$ git add README.md
README.md 就是你要添加到暂存区里的文件
使用下面的命令可以查看状态
$ git add test.txt
查看结果是这个
$ git status -s
A test.txt
M代表我们已经添加进暂存区中,但是你对这个文件进行操作后再次提交会变成AM
查看文件状态
$ git status
查看你上次提交之后是否进行修改,假如使用 -s 就可以上面例子一样看到的是简洁显示的内容
查看做了改动但是没有添加进暂存区和暂存区的差异
$ git diff
查看工作区的代码和缓存区代码的区别
它主要有其他几个选择
- 尚未缓存的改动:git diff
- 查看已缓存的改动: git diff --cached
- 查看已缓存的与未缓存的所有改动:git diff HEAD
- 显示摘要而非整个 diff:git diff --stat
忽略某些文件
项目中总是存在一些不应该被版本管理的内容,比如日志文件,编译的结果,编辑器的配置文件等等,这个时候我们需要修改名字为.gitignore 的文件(文件不存则创建一个)
在文件的第一行添加如下内容
*.[oa]
指的是忽略.0,.a结尾的文件
gitignore的规范
- 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
- 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
例子
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt
将代码提交至本地库
$ git commit -m '第一次版本提交'
使用commit可以进行代码提交, -m为提交备注
将代码提交至服务器
git psuh
假如你没设置账号密码的时候提示你需要输入账号密码
$ git push
Username for 'https://gitee.com':
Counting objects: 6, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 543 bytes | 543.00 KiB/s, done.
Total 6 (delta 2), reused 0 (delta 0)
remote: Powered By Gitee.com
To https://gitee.com/daifylearn/gitlearn
9d4cc32..1b4e332 master -> master
然后代码就被提交到默认的master分支
完整的命令应该是
git psuh origin master
git pull <远程主机名> <远程分支名>
此处需要注意,当你在a分支修改了代码要推到b分支,需要进行的命令是
$ git push origin a:b
代码回滚到某次提交
$ git reset --hard HEAD^
回退到上个版本
$ git reset --hard HEAD~3
回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id
退到/进到 指定commit的sha码
修改最后一次提交
假如提交后尝试对最后一次提交进行补充操作可以使用–amend
$ git commit --amend
例子
$ git commit -m '代码提交'
$ git add forgotten_file
$ git commit --amend
上面操作最终使得
取消缓存中的内容forgotten_file文件和之前的提交一起提交至版本库
$ git reset HEAD
例子
$ git add test.txt
$ git status -s
M test.txt
我们现在提交了一个test.txt的修改到缓存区,然后执行reset
$ git reset HEAD
Unstaged changes after reset:
M test.txt
$ git status -s
M test.txt
这里说明下最开始的M是绿色的,下面的M是红色的
这时候执行提交操作并不会将test进行提交
Changes not staged for commit:
modified: test.txt
从git中移除文件
git rm <file>
例子
$ git rm test.$ git rm test.txttxt
test.txt
(use --cached to keep the file, or -f to force removal)
fatal: pathspec 'test.$' did not match any files
这是因为之前代码又被提交到暂存区所以没法直接删除,需要进行强制删除
$ git rm -f test.txt
rm 'test.txt'
使用 -f进行强制删除
其他操作
- git rm --cached :将数据从缓存区中移除,而保留在工作区
为本地库添加一个远程仓库
$ git remote add [shortname] [url]
例子
$ git remote add sname https://gitee.com/daifylearn/gitlearn
sname就代指https://gitee.com/daifylearn/gitlearn这个地址了
查看远程库
$ git remote -v
可以查询关联的多个远程库
修改远程库在本地的显示名称
git remote rename oldName newName
可以使用上面的命令,将oldName修改为newName
从远程代码库拉取代码
$ git fetch [remote-name]
有几点需要注意
- 此命令会到远程仓库中拉取所有你本地仓库中还没有的数据,之后就可以本地访问远程仓库所有的分支了
- fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支
- 如果我们本地版本库中设置了某个分支来追踪远程库的分支,可以使用git pull命令拉取数据下来,然后将远端分支自动合并到本地仓库中当前分支
git pull
一般我们使用这个命令拉取代码,但是实际上这个代码并不是一步操作,而是两条命令的集合
git fetch
首先,从服务器上抓取本地没有的数据
git merge
然后,执行代码合并的操作
推送数据到远程代码库
$ git push origin master
解释:拉取origin下master分支的代码
ps.Git文档上专门说过origin和master并不是什么特殊的类型。只是使用init命令的时候默认设置的这个名字。当然实际上很多工具在和git关联的时候在你没有指明分支的时候,都是默认使用master,假如你这时候没有这个分支的话,很容易出现错误。
查看提交记录
我会在后续查询中专门说明