使用git向Github提交代码

本文详细介绍如何使用Git进行版本控制,包括创建版本库、文件管理、版本回退、分支管理等核心功能。通过实例演示如何解决冲突、多人协作及远程仓库的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 创建版本库
$ mkdir learngit
$ cd learngit
  • 通过git init把目录变为可以管理的仓库
$ git init
  • 把文件放入git仓库
$ git add  fliename          //filename表示文件名
$ git commit -m "name"      //提交的版本名称
  • 版本回退
    git log用来显示从最近到最远提交的日志,加上–pretty=oneline参数,可以过滤掉多余的信息
$ git log
$ git log --pretty=oneline
git reset --hard HEAD^     //回退到上一个版本
$ git reflog   //查看每一次提交的版本号
$ git reset --hard 1094a    //回退到版本号为1094a的版本
  • 工作区和暂存区
    我们平时在电脑上看到的目录被叫做工作区
    用git add提交的代码被放在暂存区
    用git commit -m filename提交的代码被放在
    我们在创建git版本库时,Git会自动为我们创建一个master分支,commit提交的代码会合并到master分支。
    用git diff HEAD – filename查看工作区和版本库里面最新版本的区别
git diff HEAD -- filename

使用命令git checkout fliename用于把文件在工作区的修改全部撤销,其中包括(1)自己修改后还没有放到暂缓区,撤销后就回到和版本库一摸一样的状态;(2)已经添加到暂缓区又做了修改,撤销后就会到了添加到暂缓区后的状态。
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

  • 删除文件
    1.要从版本库中删除文件,用git rm删掉,并git commit
    2.另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本
$ git checkout -- filename

git checkout 其实是用版本库里的版本替换工作区的版本
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

  • 添加远程库
    把本地内容推送到远程,实际上就是把当前分支master推送到远程,用git push命令,由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git push origin master     //origin是 远程分支的名字

(1)要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;

(2)关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

(3)此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

  • 远程克隆
    git clone address"

  • 创建与合并分支
    创建本地dev分支git checkout -b dev -b参数表示创建并切换
    查看当前分支git branch,当前分支前面会有*
    当我们对本地分支dev做了修改后,用git add,git commit进行提交,然后切回到要合并的master分支$ git checkout master,最后将dev的成果合并到master$ git merge dev
    查看分支:git branch
    创建分支:git branch <name>
    切换分支:git checkout <name>
    创建+切换分支:git checkout -b <name>
    合并某分支到当前分支:git merge <name>
    删除分支:git branch -d <name>

  • 解决冲突
    假如我们创建了一个新的分支feature1,对新的分支进行了修改并提交,回到master分支后又做了修改,这两个分支个自都分别有新的提交,这种合并可能就会产生冲突。git status可以告诉我们冲突的文件。Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
    当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
    git log --graph命令可以看到分支合并图。

  • 分支管理
    在实际开发中,我们应该按照几个基本原则进行分支管理:
    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

   git merge --no-ff -m "merge with no-ff" dev

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

  • bug分支
    在创建bug分支之前需要将自己的工作分支事先保存起来,等修改完bug后继续工作$ git stash命令用于保存现场。
    当出现bug时,我们一般会创建一个临时的bug分支,在临时的bug分支上进行代码修改,修改完之后合并分支,删除当前的bug分支。
    工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
    一是用git stash apply恢复,但是恢复后,stash内容并不删除,需要用git stash drop来删除;
    另一种方式是用git stash pop,恢复的同时把stash内容也删了:
  • feature分支
    没添加一个新的功能,最好建立一个新的feature分支,在新的feature进行开发,开发完后回到dev然后合并,最后删除feature分支,
    如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
  • 多人写作
    查看远程库信息git remote -v
    推送分支到远程库$ git push origin master //master分支是指定的本地分支
    master分支是主分支,因此要时刻与远程同步;
    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

当从远程clone时,只能看到本地的master分支,但是我们需要在dev开发代码,就必须创建远程origin的dev分支到本地$ git checkout -b dev origin/dev,时不时的将本地dev代码push到远程,如果两个人同时push,就会产生冲突,我们需要先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:

$ git pull

多人协作的工作模式通常是这样:

首先,可以试图用git push origin 推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

  • 小结
    查看远程库信息,使用git remote -v;
    本地新建的分支如果不推送到远程,对其他人就是不可见的;
    从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
    在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
    建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
    从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值