之前代码管理一直使用SVN,没有怎么使用过git。
git 工作原理

1、git clone 下载命令
经常使用git命令就是
git clone
下载别人的代码。
后来因为要保存自己的修改,所以就fork别人的项目,然后从自己的地址中下载,这样就可以提交到自己的目录下了。于是git的其他命令使用就开始了,
2、git status 查看状态命令
比如我下载了DBNet.pytorch项目,修改了其中几个文件,在项目的根目录下执行git status命令就可以查看自己修改了那些文件:
$ git statusOn branch masterYour branch is up to date with 'origin/master'.Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: data_loader/modules/augment.pymodified: eval.shmodified: tools/eval.pyno changes added to commit (use "git add" and/or "git commit -a")
从上面可以看到我修改了3个文件。
3、git diff file 命令查看修改的内容
以上面的eval.sh文件为例:
$ git diff eval.shdiff --git a/eval.sh b/eval.shindex b3bf468..bf0608c 100644--- a/eval.sh+++ b/eval.sh@@ -1 +1 @@-CUDA_VISIBLE_DEVICES=0 python3 tools/eval.py --model_path ''\ No newline at end of file+CUDA_VISIBLE_DEVICES=0 python tools/eval.py --model_path ./model_best.pth\ No newline at end of file
可以看到,修改的文件,没有增加新的行,修改后的文件比原文件多了一个 “./model_best.pth”。
4、使用git add 文件告诉Git把文件添加到暂存区
还是以eval.sh为例
$ git add eval.sh
5、用命令git commit -m “文件说明”
告诉Git把文件提交到仓库
$ git commit -m "add the model path"[master ebd6b50] add the model path1 file changed, 1 insertion(+), 1 deletion(-)


再运行一遍git status查看状态:此时可以看到,由于提交了一个文件,原来的3个修改文件,现在只剩2个了。
$ git statusOn branch masterYour branch is ahead of 'origin/master' by 1 commit.(use "git push" to publish your local commits)Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: data_loader/modules/augment.pymodified: tools/eval.pyno changes added to commit (use "git add" and/or "git commit -a")
此外关于git的操作还有:撤销修改、删除文件、版本回退等,可以参考下面博客。
6、Git push 推送到远程服务器
尽管上面的操作都有commit了,但是在远程服务器上还是看不到你的修改的,需要git push操作,这个操作需要输入用户名和密码验证才有权限提交。
在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了。
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名。第一个master是本地分支名,第二个master是远程分支名。
git push origin master
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin :refs/for/master
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin
–delete master
git push origin
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
- git push 如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名
参考学习:Git教程
