大家好,欢迎来到IT知识分享网。
windows,在github上clone一个项目到本地,创建一个新分支,在新分支上修改,并将新分支上传。
建议不要直接在clone下来的项目中修改,可以在本地新创建一个分支修改后上传
关于git是什么,可以参考: 廖雪峰
git常用指令
一、win10下git的下载和配置
参考: 下载git并配置
关联远程仓库(以后要clone和push的仓库)
下面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
绑定用户信息和gitlab:
$ 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 路径
- ubuntu 查看公钥:
cat ~/.ssh/id_rsa.pub
- windows查看公钥:
一般公钥和私钥保存在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 // 切换分支
关联本地仓库到gitlab
先查看你远程仓库的地址,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
中,选择源仓库源分支和目标仓库目标分支,确认后即可提交…
二、新建git仓库:git init
- 如在
E:\my_project
下执行
git init 新建项目
- 或在
E:\my_project\project_1
下执行
git init
通过ls -al
命令可以看到,在新建项目的目录下生成一个隐藏的.git
文件
三、拉取项目:git clone
从远端服务器拉取项目
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 status
出现:
这里提示要使用 git add ,并且说没有要commit的文件(add后才会有要commit的文件)
然后:
添加文件到暂存区:git add
git add -A // 表示添加所有文件 git add . // 同上
或
git add 文件名
(暂存区指的是还没有被提交的文件区域)
再次查看仓库状态:
这里提示需要commit
然后:
提交更改:git commit
将本地暂存区的文件提交到本地的版本库中(不影响服务器):
git commit -am "test" // 一次提交所有暂存区文件
或
git commit -m "test" // 一次提交所有暂存区文件
一定要加 -m
参数,“ ”里面写你这次改动的内容,这在后面查看的时候对这个文件改了啥一目了然。
再次查看仓库状态:
很干净,这时候就要push到远程仓库了。
修改最近一次的提交信息
比如修改最近一次提交的说明信息:
git commit --amend
会进入vim编辑器进行修改
修改之后会生成一个新的提交节点,用于取代之前需要修改的提交节点
上传:git push
将本地版本库的分支上传到服务器的对应分支
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 pull
确保本地工作目录与远程仓库保持同步。==用于从远程仓库获取某个分支的更新,并与本地制定分支进行自动合并。
== 它的作用相当于执行了 git fetch
(获取远程仓库的最新变化)和 git merge
(将远程仓库的最新变化合并到当前分支)两个步骤。
例如:
从远程仓库origin
拉取 远程分支
并将其合并到本地的 本地分支
:
git pull origin 远端分支:本地分支 // 如果 本地分支 不存在,Git 会尝试创建一个新的分支。
或
git pull origin 远端分支 // 当 远端分支名 与 本地分支名 相同
获取远端更新:git fetch
git fetch origin 远端分支:本地分支
或
git fetch origin 远端分支 // 当远端分支名与本地分支名相同
git fetch
只更新不合并,因此不影响本地当前分支(只会更新到仓库,不影响工作区),相当于本地使用git branch
会看到多了一个新的分支。
合并分支1:git merge
将源分支的更改合并到当前分支中:
git checkout 目的分支 // 首先切换到目的分支上 git merge 源分支
或
git merge 源分支 目的分支
在当前分支上创建一个新的合并提交,将源分支(要合并的分支)和当前分支的历史记录整合在一起。
特点:保留了原有分支的提交历史,合并后的提交历史是一条线性的合并历史,可以清晰地看出每个分支的贡献。
合并分支2:git rebase
将远端目标分支的更改移动到当前分支上,并使提交历史保持线性。
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指令
删除文件:git rm
git rm 文件名
删除文件后,该文件不再被git管理追踪
移动\重命名文件:git mv
移动文件:
git mv 文件名 路径
重命名文件:
git mv 旧文件名 新文件名
比较分支之间的差异:git diff
比较分支差异:
git diff 本地分支 比较分支
比较节点差异:
git diff commit_id_1 commit_id_2
查看日志:git log
git log
可以查看commit提交的日志(最上面是最新的),包括作者、时间和说明。
查看详细日志,包括修改、新建、删除等:
git log --name-status
只看最近两个提交节点信息:
git log -2
查看分支:git branch
查看本地分支:
git branch
查看服务器上分支:
git branch -r
查看本地和服务器上所有分支:
git branch -a
创建、切换分支:git checkout
git branch newbranch // 新建分支 git checkout -b newbranch // 创建并切换(常用),新的分支内容和之间的一模一样
git checkout newbranch // 切换分支 git checkout -f newbranch // 强制切换
撤销文件操作:git checkout
当修改了某些文件中的内容,但是还没有git commit
这时候想要撤销这些文件的修改,使用
git checkout 文件名
可以通过git atatus
查看撤销前后的状态变化
撤销所有操作时,使用(慎用)
git checkout .
删除分支:git branch -d
- 删除本地分支:
git branch -d 本地分支名 git branch -D 本地分支名 // 强制删除
- 删除服务器上的远程分支:
git push origin -d 远程分支名
push相当于是将删除操作推送到服务器
撤销操作:git reset
通过执行git log
查看历史提交节点,确定要回退的commit_id
git reset commit_id
git reset
用于撤销当前工作区执行的git add
或git commit
操作
查看最近git指令:git reflog
git reflog
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/116820.html