工作中经常会使用到git
命令来进行代码版本管理,总结了一些常用场景下的命令,在此分享出来。
托管自己编写的代码
步骤
1 | git init |
步骤说明
首先在
GitHub
上创建一个仓库,把地址复制下来,如:https://github.com/my/test.git
打开
GitBash
,cd
到要提交的项目根目录下,输入git init
命令初始化仓库,此时在项目文件夹下会出现.git
隐藏文件夹
使用命令
git add .
添加所有文件到暂存区。在修改代码之后,可以单独使用git add 文件名
(后面是你修改过的文件) 添加指定修改的文件到暂存区git commit -m "first commit"
,提交代码。"first commit"
部分为本次提交的更新说明关联远程仓库:
git remote add origin https://github.com/my/test.git
(后面是你的仓库地址)我们可以通过命令
git status
来查看是否还有文件未提交,如果有红色文字出现,说明还有文件未提交。git push -u origin master
(推送到远程仓库)。
由于远程库是空的,我们第一次推送master
分支时,加上了 –u
参数,Git
不但会把本地的master
分支内容推送到远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时,只要做了提交就可以使用命令git push origin master
进行推送。
可能出现的错误
一、错误信息
1 | my@my MINGW64 /e/gitProjects/text (master) |
二、问题分析
出现这种问题的原因一般都是代码仓库存在本地没有的文件。
到github
上查看远程repository
,会发现有一个README.md
文件(本地代码中没有),而出现错误的原因是github
中的README.md
文件不在本地代码目录中。
也就是说我们需要先将远程代码库中的任何文件先pull
到本地代码库中,才能push
新的代码到github
代码库中。
三、解决问题
方法一
将远程代码库中的代码
pull
到本地代码库,并且执行合并merge
:1
$ git pull --rebase origin master
再次
push
代码:1
$ git push origin master
我们看到本地代码已经成功的提交到远程代码中,至此问题解决。
方法二
在创建仓库时,不要勾选生成README.md
文件。
方法三
在创建仓库时,如果勾选生成README.md
文件,可以复制项目地址,在想提交的项目根目录下,使用命令git clone git@github.com:my/test.git
,然后再进行上述的第三步以及之后的操作。
修改fork的代码之后提交
如何在github
上面将他人的项目拷贝到自己的本地,修改代码之后重新上传到自己的项目主页,同时通知原项目开发者。
步骤
1 | git clone "刚才fork下来后项目的地址" |
步骤说明
- 在任意一个
github
项目上点击Fork
到自己的主页 clone
到本地1
git clone '刚才fork下来后项目的地址'
在刚才
clone
下来的文件夹内,添加与原始库的关联,命名为upstream
,此地址是原项目开发者的项目主页上的clone
的地址,这是专门用来与主开发者保持相同进度的方法:1
git remote add upstream "项目原地址"
从原始库中抓取最新的更新,我们需要使用是git fetch upstream
命令。这命令会自动选择更改过的代码文件进行更新。1
git fetch upstream
在本地修改完文件测试完成之后,将代码提交到我们自己的
fork
出来的项目主页。1
2
3git add .
git commit -m "更新说明"
git push 'fork后的地址'在项目主页代码目录如图所示的位置,点击绿色的按钮,然后就可以比较你的版本和源中代码的差别,然后就可以选择发送一个
Pull request
给主开发者,添加修改的原因描述。然后就等待主开发者去merge
了。
多人协作
步骤
1 | git clone 项目地址 |
步骤说明
首先
clone
代码到本地仓库1
git clone '项目地址'
如果分支存在则只切换分支,若不存在则创建并切换到指定分支,
1
git checkout -b 分支名
如果只是查看分支,可以使用git branch
命令,不需带任何参数。
提交对新分支的更改到远程仓库
1
2
3git add .
git commit -m "更新说明"
git push origin 分支名使用
git checkout master
切回到master
分支- 如果
master
分支有修改,使用1
git pull origin master
更新远程仓库的修改到本地仓库
- 合并分支到
master
,并提交到远程仓库1
2git merge 分支名
git push origin master
补充
可能会用到的命令1
2
3
4
5
6
7
8
9
10git branch //不带参数:列出本地已经存在的分支,并且在当前分支的前面用"*"标记
git branch -r //查看远程版本库分支列表
git branch -a //查看所有分支列表,包括本地和远程
git branch dev //创建名为dev的分支,创建分支时需要是最新的环境,创建分支但依然停留在当前分支
git branch -d dev //删除dev分支,如果在分支中有一些未merge的提交,那么会删除分支失败
git branch -D dev //强制删除dev分支
git branch -m oldName newName //给分支重命名
git checkout 文件名 //放弃单个文件的修改
git checkout . //放弃当前目录下的修改