赞
踩
windows,在github上clone一个项目到本地,创建一个新分支,在新分支上修改,并将新分支上传。
建议不要直接在clone下来的项目中修改,可以在本地新创建一个分支修改后上传
关于git是什么,可以参考: 廖雪峰
参考: 下载git并配置
下面origin后面的链接换成自己的
git remote add origin git@gitlab.nroad.com.cn:nroad-edu/vpp.git
git remote add origin https://gitlab.nroad.com.cn/nroad-edu/vpp.git
$ git config --global user.name "注册gitlab的名字"
$ git config --global user.email "注册gitlab使用的邮箱"
(该信息存放在~/.gitconfig
文件中)
ssh-keygen -t rsa -C "你的邮箱"
在生成过程中会提示输入公钥存储的路径和密码,建议全部回车
然后输出的信息中可以看到公钥的存储路径:your public key has been saved in 路径
cat ~/.ssh/id_rsa.pub
C:\Users\Administrator\.ssh
里面打开id_rsa.pub
,复制里面的内容 (最后面的邮箱不要复制)
打开gitlab,在设置中找到SSH,将复制内容粘贴到对应位置,添加,完成配置。
上面两步可以参考
在要上传的项目所在目录下右键鼠标,点击git bash
会出来一个命令行窗口:
注意项目所在目录位置,图中D:\VPP\vpp 是我正确的目录位置,可以输入git branch看分支:
stable/2101 是我clone的时候指定要clone的分支,clone下来后这个项目会自带一个.git文件:
我当时clone的时候把这个项目放在一个新建的D:\VPP中,因此在这个文件夹中打开git bash,输入指令他会提示你没有git 仓库,就像这样:
所以一定要在正确的目录下上传项目。
git branch newbranch // 新建分支
git checkout -b newbranch // 创建并切换(常用)
git switch -c newbranch // 创建并切换
git switch yourbranch // 切换分支
先查看你远程仓库的地址,ssh,https这两个地址都可以,复制
本地git bash中执行:
git remote add origin git@gitlab.nroad.com.cn:jiangxt/vpp.git
注意把 git@gitlab.nroad.com.cn:jiangxt/vpp.git 换成你自己的地址。
这样你就可以开始上传项目了。
在远程公共仓库页面点击fork,克隆一个到自己的远程仓库,然后再git clone
到本地开发。
未来也是git push
到自己的远程仓库。
当将自己远程仓库文件推送到公共仓库时,在自己仓库左侧的merge requests
中,选择源仓库源分支和目标仓库目标分支,确认后即可提交…
E:\my_project
下执行git init 新建项目
E:\my_project\project_1
下执行git init
通过ls -al
命令可以看到,在新建项目的目录下生成一个隐藏的.git
文件
从远端服务器拉取项目
git clone 项目地址
请确保有项目的访问权限,不然会出现以下问题
Cloning into '项目名称'...
remote: Repository not found.
fatal: repository '项目地址' not found
目前一些git服务器使用Git LFS(Large File Storage)更高效地管理大文件。Git LFS是Git的一个扩展,允许将大文件单独存储在Git仓库之外。因此这时候使用git clone
将无法拉取完整项目代码。
而是要使用:
git lfs clone
参考:Git LFS使用教程
当修改本地项目中一些文件,或是新建文件后,可以:
git status
出现:
这里提示要使用 git add ,并且说没有要commit的文件(add后才会有要commit的文件)
然后:
git add -A // 表示添加所有文件
git add . // 同上
或
git add 文件名
(暂存区指的是还没有被提交的文件区域)
再次查看仓库状态:
这里提示需要commit
然后:
将本地暂存区的文件提交到本地的版本库中(不影响服务器):
git commit -am "test" // 一次提交所有暂存区文件
或
git commit -m "test" // 一次提交所有暂存区文件
一定要加 -m
参数,“ ”里面写你这次改动的内容,这在后面查看的时候对这个文件改了啥一目了然。
再次查看仓库状态:
很干净,这时候就要push到远程仓库了。
比如修改最近一次提交的说明信息:
git commit --amend
会进入vim编辑器进行修改
修改之后会生成一个新的提交节点,用于取代之前需要修改的提交节点
将本地版本库的分支上传到服务器的对应分支
git push 远程仓库(默认就是origin) 本地分支:远程分支
如:
git push origin jxt:jxt
或
git push 远程仓库(默认就是origin) 本地分支
如:
git push origin jxt
git push origin jxt
会自动创建远程分支,该远程分支名即为本地分支名jxt
如果有问题可以加参数 -f 强制上传
不建议强制上传
这应该是之前关联仓库错误,需要将之前的仓库删掉换成想要的仓库
// 查看本地关联的仓库详细信息
git remote -v
我之前因为使用了git镜像网站加快clone速度,因此查看本地的关联仓库为:
我并不想push到这个仓库上面,因此要删掉:
// origin 替换为你本地要删除的远程仓库名字
git remote rm origin
然后添加自己的:
git remote add origin git@gitlab.nroad.com.cn:nroad-edu/vpp.git
貌似用https地址会找不到分支,建议使用ssh的git地址。
git pull
确保本地工作目录与远程仓库保持同步。==用于从远程仓库获取某个分支的更新,并与本地制定分支进行自动合并。
== 它的作用相当于执行了 git fetch
(获取远程仓库的最新变化)和 git merge
(将远程仓库的最新变化合并到当前分支)两个步骤。
例如:
从远程仓库origin
拉取 远程分支
并将其合并到本地的 本地分支
:
git pull origin 远端分支:本地分支 // 如果 本地分支 不存在,Git 会尝试创建一个新的分支。
或
git pull origin 远端分支 // 当 远端分支名 与 本地分支名 相同
git fetch origin 远端分支:本地分支
或
git fetch origin 远端分支 // 当远端分支名与本地分支名相同
git fetch
只更新不合并,因此不影响本地当前分支(只会更新到仓库,不影响工作区),相当于本地使用git branch
会看到多了一个新的分支。
将源分支的更改合并到当前分支中:
git checkout 目的分支 // 首先切换到目的分支上
git merge 源分支
或
git merge 源分支 目的分支
在当前分支上创建一个新的合并提交,将源分支(要合并的分支)和当前分支的历史记录整合在一起。
特点:保留了原有分支的提交历史,合并后的提交历史是一条线性的合并历史,可以清晰地看出每个分支的贡献。
将远端目标分支的更改移动到当前分支上,并使提交历史保持线性。
git rebase 远端分支 // 远端分支最好不要是公共的master分支,不然会更改master分支的log
将源分支的提交逐个应用到当前分支的最新提交上,然后将当前分支指向最新的提交,形成一条新的提交历史线。
特点:创建了一个新的提交历史,看起来就像所有的更改都是在一个分支上进行的一样,保持了提交历史的线性性。
参考:Git合并操作之merge、rebase、squash详解
当git merge
时, 例如两个分支的同一句话有不同的修改,在合并时会产生冲突:
Auto-merging 发生冲突的文件名
CONFLICT (content): Merge conflict in 发生冲突的文件名
Automatic merge failed; fix conflicts and then commit the result.
此时使用git status
会提示有无法合并的文件:
On branch main
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file.txt
no changes added to commit (use "git add" and/or "git commit -a")
根据提示,可以手动修改冲突文件:
vim 发生冲突的文件名
会出现以下内容:
<<<<<<< HEAD
This is some content on the main branch.
=======
This is some content on the feature branch.
>>>>>>> feature-branch
=======
上面是当前分支该文件内容,下面是需要合并过来的分支该文件内容,手动修改
(注意把<<<<<<< HEAD
和>>>>>>> feature-branch
内容也删掉)
然后根据git status
中出现的提示,解决冲突后使用 git add
来标记已经解决,然后使用 git commit
完成合并操作
git rm 文件名
删除文件后,该文件不再被git管理追踪
移动文件:
git mv 文件名 路径
重命名文件:
git mv 旧文件名 新文件名
比较分支差异:
git diff 本地分支 比较分支
比较节点差异:
git diff commit_id_1 commit_id_2
git log
可以查看commit提交的日志(最上面是最新的),包括作者、时间和说明。
查看详细日志,包括修改、新建、删除等:
git log --name-status
只看最近两个提交节点信息:
git log -2
查看本地分支:
git branch
查看服务器上分支:
git branch -r
查看本地和服务器上所有分支:
git branch -a
git branch newbranch // 新建分支
git checkout -b newbranch // 创建并切换(常用),新的分支内容和之间的一模一样
git checkout newbranch // 切换分支
git checkout -f newbranch // 强制切换
git branch -d 本地分支名
git branch -D 本地分支名 // 强制删除
git push origin -d 远程分支名
push相当于是将删除操作推送到服务器
通过执行git log
查看历史提交节点,确定要回退的commit_id
git reset commit_id
git reset
用于撤销当前工作区执行的git add
或git commit
操作
git reflog
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。