工作中经常会使用到git
命令来进行代码版本管理,本人总结了一些常用场景下的命令,在此分享出来。
git简易教程
托管自己编写的代码
步骤
git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:my/test.git
git push -u origin master
步骤说明
- 首先在
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
进行推送。
可能出现的错误
一、错误信息
my@my MINGW64 /e/gitProjects/text (master)
$ git push origin master
To git@github.com:my/text.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:my/text.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
二、问题分析
出现这种问题的原因一般都是代码仓库存在本地没有的文件。
到github
上查看远程repository
,会发现有一个README.md
文件(本地代码中没有),而出现错误的原因是github
中的README.md
文件不在本地代码目录中。
也就是说我们需要先将远程代码库中的任何文件先pull
到本地代码库中,才能push
新的代码到github
代码库中。
三、解决问题
方法一
- 将远程代码库中的代码
pull
到本地代码库,并且执行合并merge
:
$ git pull --rebase origin master
- 再次
push
代码:
$ git push origin master
我们看到本地代码已经成功的提交到远程代码中,至此问题解决。
方法二
在创建仓库时,不要勾选生成README.md
文件。
方法三
在创建仓库时,如果勾选生成README.md
文件,可以复制项目地址,在想提交的项目根目录下,使用命令git clone git@github.com:my/test.git
,然后再进行上述的第三步以及之后的操作。
修改fork的代码之后提交
如何在github
上面将他人的项目拷贝到自己的本地,修改代码之后重新上传到自己的项目主页,同时通知原项目开发者。
步骤
git clone "刚才fork下来后项目的地址"
git remote add upstream "项目原地址"
git fetch upstream
git add .
git commit -m "更新说明"
git push "fork后的地址"
步骤说明
- 在任意一个
github
项目上点击Fork
到自己的主页 clone
到本地
git clone '刚才fork下来后项目的地址'
- 在刚才
clone
下来的文件夹内,添加与原始库的关联,命名为upstream
,此地址是原项目开发者的项目主页上的clone
的地址,这是专门用来与主开发者保持相同进度的方法:
git remote add upstream "项目原地址"
从原始库中抓取最新的更新,我们需要使用是git fetch upstream
命令。这命令会自动选择更改过的代码文件进行更新。
git fetch upstream
- 在本地修改完文件测试完成之后,将代码提交到我们自己的
fork
出来的项目主页。
git add .
git commit -m "更新说明"
git push 'fork后的地址'
- 在项目主页代码目录如图所示的位置,点击绿色的按钮,然后就可以比较你的版本和源中代码的差别,然后就可以选择发送一个
Pull request
给主开发者,添加修改的原因描述。然后就等待主开发者去merge
了。
多人协作
步骤
git clone 项目地址
git checkout -b 分支名
git add .
git commit -m "更新说明"
git push origin 分支名
git checkout master
git pull origin master
git merge 分支名
git push origin master
步骤说明
- 首先
clone
代码到本地仓库
git clone '项目地址'
- 如果分支存在则只切换分支,若不存在则创建并切换到指定分支,
git checkout -b 分支名
如果只是查看分支,可以使用git branch
命令,不需带任何参数。
- 提交对新分支的更改到远程仓库
git add .
git commit -m "更新说明"
git push origin 分支名
- 使用
git checkout master
切回到master
分支 - 如果
master
分支有修改,使用
git pull origin master
更新远程仓库的修改到本地仓库
- 合并分支到
master
,并提交到远程仓库
git merge 分支名
git push origin master
补充
可能会用到的命令
git 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 . //放弃当前目录下的修改
git branch -m old_local_branch_name new_local_branch_name //重命名git本地分支
git remote set-url origin git@192.168.1.18:mStar/OTT-dual/K3S/supernova //git 修改远程仓库 remote origin
附录
版权属于:Sanakey(特殊声明除外)
本文链接:https://keymoe.com/archives/12/
所有原创文章采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。 您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。