怎样把一个新项目/本地项目提交到github?
Table of Contents
Github项目必须文件
.gitignore
:忽略文件,设置哪些目录/文件不需要上传(怎么设置百度一下)。严格来说,这并不是必须的,但基本上应该不会有人不添加这个文件。README.md
:说明文档,在文件中对本项目进行说明,比如这个项目是干嘛用的,怎么使用等等。严格来说,这个文件也不是必须的,但基本上不会有人不添加这个文件,因为它会在github上显示。LICENSE
:版权文件,不会写可以去github的项目中随便找一个就行,一般用MIT就行。其实这个文件也不是必须的,可以不创建这个文件,但最好有!
以上三个文件,虽说不是绝对必须的,但基本上没有人会不添加,LICENSE文件可能有人会不加,但.gitignore
跟README.md
是绝对会加的。
在github创建一个新仓库
得到仓库地址
初始化git
在要提交的项目目录下,执行以下命令:
git init
如下图,我要提交的是RedisWebManager
文件夹,则要进入该目录中再执行git init
执行以下命令,把所有文件都添加到git中,与正则类似,英文句点是代表所有字符的意思,在这里就代表所有文件,当然会自动排除.gitignore
文件中设置为忽略的文件:
git add .
如果只添加少数文件(一个或几个文件),除了可以用上述的git add .
,还可以直接指定要添加哪些文件(空格格开即可,有哪些文件可添加可以用git status
查看,红色的就表示可添加),如:
git add 文件1 文件2
添加错了,撤消所有:
git reset HEAD
撤消指定的一个或多个(其中的file1,file2是用git status
查看的路径):
git reset HEAD file1 file2
添加除了某几个文件外的所有已修改文件:
# 先添加所有
git add -u
# 然后用git status找到你要取消添加的,比如我要取消添加的是“static/js/dashboard.js”,则用以下命令就可以取消它的添加
git reset -- static/js/dashboard.js
执行以下命令提交(注意这里不是提交到github),-a
表示提交前面添加的所有文件,-m
后面指定的是注释。
git commit -a -m "first commit of RedisWebManager"
如果要提交少数文件(一个或几个,空格隔开即可):
git commit 文件1 文件2 文件3 文件n -m "first commit of RedisWebManager"
推送到git仓库(方法一)
注意:git仓库不一定要github,还可以是gitee,自建的gitlab等等,总之所有git服务器都得,只不过地址不一样而已。
先用以下命令设置要推送到哪个远程仓库,最后一个是github仓库地址,注意换成你自己的地址
git remote add origin https://github.com/xiebruce/RedisWebManager.git
然后推送到github(远程仓库必须为空,不能有任何文件)
git push -u origin master
如果远程git仓库不为空(有任意一个文件,如README.md
),则push会失败,失败信息一般类似这样
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git remote add origin https://github.com/xiebruce/RedisWebManager.git'
hint: Updates were rejected bec
如果是中文报错可能是这样
error: 源引用规格 master 没有匹配
error: 推送一些引用到 'https://gitee.com/xiebruce/test.git' 失败
另外也遇到过中文报错是这样的
! [rejected] main -> main (fetch first)
error: 推送一些引用到 'https://github.com/xiebruce/learn-git.git' 失败
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。
但一般创建仓库可能会问你是否创建README.md
或.gitignore
,而且很多人都会去创建,那如果我就想在远程git仓库不为空的情况下推送,又该怎么推送呢?
这时你要先把远程仓库的文件pull下来
git pull
然后要把HEAD设置为origin/main
(但是会删掉远程仓库更新下来的存在于暂存区中的文件以及本地已经添加到暂存区的文件,只会删除暂存区,不会删除工作区文件,往下看,可以恢复)
git reset origin/main
然后恢复远程仓库更新下来的所有文件
git restore .
由于之前本地加入暂存区的文件已经在前面reset时删除,所以需要重新把本地的文件添加到暂存区并提交
git add .
git commit -m "添加test.txt"
然后就可以正常添加文件并push了
git push -u origin main
打标签(即发布版本),-m
指定的是注释(m是message的意思)
git tag -a v0.1 -m "v0.1"
把标签推送到github
git push origin v0.1
从github中删除tag
#先删除本地
git tag -d v0.1
#再删除github
git push origin :refs/tags/v0.1
强制覆盖本地
git fetch --all
git reset --hard origin/master
git pull
撤消本地修改,直接覆盖
git reset --hard
git pull
推送到git仓库(方法二)
在github创建仓库得到仓库地址后,把仓库clone下来:
git clone https://github.com/xiebruce/RedisWebManager.git
把你的项目的文件全部复制进去,比如我的项目文件夹名字是“RedisWebManager”,这个文件夹本身就不要复制进去了,因为git clone下来的时候,已经创建了这个文件夹,我们就把“RedisWebManager”文件夹里面的所有文件复制到github clone下来的文件夹(也叫“RedisWebManager”)里面就行。
然后项目必须文件该有的也得有,最后用以下命令添加、提交,最后推送到github(或者自建的gitlab之类的):
# 添加
git add .
# 提交
git commit -a -m "First commit"
# 推送到github
git push
撤消某次commit:假如你修改了某个文件,而且commit了,并且又push到了github,然后你突然又发现这个文件不应该改成这样,要回到你修改前的状态,则可以这样撤消:
先用git log
命令查看commit日志
git log
它会显示出你每个commit都做了哪些修改,从上往下数,第二个其实就是你上一次的修改,复制它的commit id(就是commit后面那一长串),然后用以下命令即可回退到这个commit(xxxxxxxxxxx是你从git log里复制的commit id,也是你要回退到的那个commit id)
git reset --hard xxxxxxxxxxx
由于回退了,当前版本低于github版本,你想git push是push不上去的,需要加-f
(即force的意思)强推上去
git push -f