git管理项目

创建Git仓库

版本库又叫仓库(repository),这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除都能被跟踪。在项目开始前或者项目进行中都可以进行Git仓库的创建,首先进入项目的根目录,然后运行

$ git init
Initialized empty Git repository in C:/DeskTop/git-repositories/new_repository/.git/
(显示信息意思为:初始化了一个空的Git仓库,new_repository_1目录下多了一个.git目录,时用来管理版本库的)

之后,在根目录下就会出现一个.git文件夹(该目录默认是隐藏的),这样我们的本地Git仓库就建好了,但是现在这只是一个空仓库,我们的文件还没有放入这个仓库。

获取Git仓库

1、HTTPS方式
从一个服务器克隆一个现有的 Git 仓库: git clone [url] 自定义本地仓库的名字: git clone [url] directoryname

2、SSH方式,对于初学者,不知道ssh在哪里,我的在C:\Users\asus.ssh,找到id_rsa.pub,以记事本的方式打开复制,登录到自己的github,点击右上角的头像,再点击Settings,找到SSH and GPK keys 点击 ,右上角有个New SSH key 的按钮点击,随便填一个Title,再把你刚才复制的东西粘贴到Key框里,然后点击Add SSH key,就可以用SSH克隆项目了。
(如果找不到.ssh,在计算机里搜索)
使用

ssh-keygen -t rsa

可以在本地生成公钥和私钥。

git配置全局变量

配置用户名邮箱:

git config --global user.name stefan
git config --global user.email 1085426186@qq.com

这样你提交的远程分支就显示你的信息了。

当然你也可以找到git的配置文件.gitconfig,进行修改。我的在C:\Users\asus下面,如果找不到可以搜索文件名.gitconfig。
我的以记事本打开是这样的:

[user]
    name = Stefan
    email = 502681863@qq.com
    signingkey = stefan0712
[credential]
    helper = manager
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
[color]
    ui = true
[alias]
    st = status
    cm = commit -m
    ck = checkout
    plo = pull origin
    ps = push
    a =add .

git使用步骤

想把本地的一个项目上传到github,并且之前也没有与远程有管理。
步骤:
1 打开项目文件夹,右击选中Git Bush Here,打开git命令框,输入git init 即把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
2 在github里新建一个项目,复制HTTPS地址或者SSH地址
3 在git命令里输入git remote add origin https://github.com/StefanPython/demo.git与远程新建的项目建立连接。
4 查看远程库的信息,输入命令git remote,显示origin就证明建立连接成功。
5 现在就可以上传项目到远程仓库了,git status 查看文件在git仓库中的状态,显示红色说明文件还在本地工作区
6 命令行输入git add . 将所有的文件添加到暂存区,现在git status 文件显示绿色。
7 命令行输入git commit -m “新建什么,修改什么”,这样就是把文件提交到版本库
8 git push -u origin master 将项目推送到远程仓库(同时也将本地分支master推送到远程),登上github打开刚新建的项目,刷新就会出现你推送的东西。(第一次推送要加-u,这样以后就可以直接git push,不用再加 origin master)。需要注意的是,如果你在GitHub创建新的Repository时,选择了初始化md文件,这样远程库就不是空的了。在执行上述git push 命令的时候会报错,我们需要先执行以下命令

git pull origin master --allow-unrelated-histories

将远程库中的文件拉到本地库,–allow-unrelated-histories参数的作用是允许合并不相干的历史记录。然后再执行git push命令就可以了。
9 实际工作中对本地项目的修改再推送到远程就是重复5-8的步骤

在远程先建立一个项目,把空项目clone到本地
步骤:

1 在github上新建一个空项目,复制HTTPS或者SSH
2 在本地盘中随便找一个地方右键打开git命令窗,输入git clone git@github.com:StefanPython/demo.git 本地就会出现一个和远程一样的项目,并且已经和远程建立了来接。
3 如此就可以使用命令

git status
git add .
git commit -m "修改"
git push(这里是直接可以push的,因为把远程master也克隆下来了)

多人协作

多人协作步骤:

1 新建项目,默认有一个主分支master,还要新建一个develop分支,简称dev,一般都是在dev分支下工作的,到最后项目测试基本完成,要发布了,就把dev分支下的项目合并到master分支上。master分支基本不做改动,只做项目版本的更新。
2 让每一个协作者克隆远程项目到本地,自然也就克隆了master分支和dev分支,切换到dev分支下进行工作。
3 有时候别人修改了一个地方已经提交到远程了,自己也修改了同样的地方,自己也要push时却失败了,这是因为远程项目的版本是最新的,可能和你修改的有冲突,所以每次push前先git pull把远程下拉后解决冲突再push就可以成功了。
4 当然你也可以在本地建立一个自己的分支dev_name,平时工作在自己分支下工作,等要push到远程的时候就切换到dev分支下git merge dev_name 把dev_name 下的代码合并到dev下就可以了。

git checkout dev(切换到dev分支)
git status
git add .
git commit -m "修改"
git pull origin dev
git push

git checkout –b dev_xfy(创建并切换到dev_xfy分支下)
git checkout dev
git merge dev_xfy(合并dev_xfy到dev)
git pull origin dev
git push

解决冲突:
当两个分支在同一个文件的同一个位置做了修改时,二者合并时会出现冲突,查看冲突,留下正确的修改,重新

git add b.txt 
git commit -m’冲突已解决’。

其实解决冲突也很简单,当冲突出现时,git status 会告诉你哪些文件有冲突(显示红色的文件),在项目中找到相应的文件 看到类似的

<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev_xfy

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们把这些标记删掉,留下正确的代码就可以了。
<<<<<<< HEAD指的是当前分支的内容是“Creating a new branch is quick & simple.”,而>>>>>>> dev_xfy代表dev_xfy分支中此处的内容是“Creating a new branch is quick AND simple.”
我们需要手动修改这个冲突,比如,我们可以切换到dev_xfy分支,然后把“Creating a new branch is quick AND simple.”改为master中的“Creating a new branch is quick & simple.”,这样就可以正常的合并了。

把文件添加到版本库

git add readme.md
git add src/
git commit -m "add readme and src/"

使用以上命令,可以把文件添加到版本库,该命令既可以用来添加单个文件,也可以用来添加文件夹。
注意一下,我们执行完git add命令后,必须得执行git commit命令,因为git add只是把文件添加到暂存区(stage),而git commit命令是把暂存区的文件提交到当前分支,“”里面是和该提交有关的描述信息,自己可以根据实际情况进行描述。如下图所示。因此,这两个命令必须都得执行。
在这里插入图片描述
工作区就是我们项目的根目录,而版本库则位于.git文件夹内。我们通过add命令将修改的文件由工作区转移到暂存区(stage),然后通过commit命令把暂存区的内容提交到当前分支master。

项目管理

版本回退

如果我们想把项目代码回退到上一个版本,或者回退到指定版本,应该用什么命令呢?
在Git中,用Head来表示当前版本,如果想要回退到上个版本,只需

git reset --hard HEAD^

如果想回退到上上个版本呢?使用git reset --hard HEAD^^,如果想要回退到上上…个版本,只需要使用git reset --hard HEAD~N,N是想要回退的版本个数。

git reset --hard HEAD~20

即回退到往前20个版本。如果我们想要回退到指定版本呢?那我们就需要知道想要回退到的版本号,通过

git log

可以查看历史版本号,如下所示,然后选择我们需要的那个版本号。

$ git log
commit c317ac6fe8af7fbe084d5a4689e22f128aef9c9c (HEAD -> master)
Author: Lu <10568269+luxinfeng@users.noreply.github.com>
Date:   Wed May 20 15:21:36 2020 +0800

    third version

commit 44a64dec50dc511480615745aee0c0f27660127a
Author: Lu <10568269+luxinfeng@users.noreply.github.com>
Date:   Wed May 20 15:21:15 2020 +0800

    second version

commit 6520506073bfaf16ead102433c6109a9dc66643b
Author: Lu <10568269+luxinfeng@users.noreply.github.com>
Date:   Wed May 20 15:21:02 2020 +0800

    first version

其中,comiit后面就是版本号,我们可以通过

git reset --hard 44a64dec50dc511480615745aee0c0f27660127a

将项目回退到第二个版本,如果版本数较少,我们可以只输入版本号的前几位,Git会自动寻找对应的版本号,如果版本数较多,可以会引起冲突,我们现在的版本数较少,我们执行如下代码

git reset --hard 44a6

也可以回退到第二个版本。
现在我们回到第二个版本了,但是如果我们想要再回到第三个版本怎么办?使用git log查看版本号?

$ git log
commit 44a64dec50dc511480615745aee0c0f27660127a (HEAD -> master)
Author: Lu <10568269+luxinfeng@users.noreply.github.com>
Date:   Wed May 20 15:21:15 2020 +0800

    second version

commit 6520506073bfaf16ead102433c6109a9dc66643b
Author: Lu <10568269+luxinfeng@users.noreply.github.com>
Date:   Wed May 20 15:21:02 2020 +0800

    first version

commit d33955c2800f7f12811e30a597200da69795363c
Author: Lu <10568269+luxinfeng@users.noreply.github.com>
Date:   Wed May 20 15:20:17 2020 +0800

    first version

发现找不到第三个版本号,这时我们可以使用git reflog命令,该命令记录了你的所有操作,执行该命令。

$ git reflog
44a64de (HEAD -> master) HEAD@{0}: reset: moving to 44a64dec
c317ac6 HEAD@{1}: commit: third version
44a64de (HEAD -> master) HEAD@{2}: commit: second version
6520506 HEAD@{3}: commit: first version
d33955c HEAD@{4}: commit: first version
57f0388 HEAD@{5}: commit (initial): first version

可以看到我们第三个版本号的前几位是c317ac6,查到了版本号,我们就可以继续用git reset --hard c317ac6来回退到第三个版本了。

撤销修改

如果我们在写代码的过程中,发现某些文件的修改出问题了,想要取消这些修改,该怎么办呢?版本回退?使用版本回退确实可以撤销修改,但是有可能回退的太多,许多工作还得重新做,挺浪费时间和精力的。这时,我们可以使用git checkout -- 要撤销修改的文件来进行操作。比如我们想要撤回对readme.md文件的修改,只需要执行

git checkout -- readme.md

这样,就会把readme.md文件恢复到最近一次执行git commit或者git add后的状态。也就是说,git checkout – readme.md命令只会撤销在工作区(可以看文章一开始的那张图)的修改,如果你想撤销的修改已经被git add命令添加到暂存区或者git commit命令提交到当前分支的话,使用git checkout是没法回退的。如果想要撤销暂存区的修改,可以使用

git reset HEAD readmd.md

该命令可以把暂存区的内容回退到工作区。如果想要撤回已经提交到当前分支的修改,那就可以使用版本回退的命令,回退到自己需要的版本。
如果我们在本地使用文件资源管理器删除掉test.md文件后想找回该文件,只需要执行

git checkout -- test.md

如果我们在执行完

git rm test.md
git commit -m "del test.md"

后,想找回该该文件,只需要执行

git reset HEAD test.md

如果我们执行 commit后想找回该文件,只需要

git reset --hard HEAD^

回退到上一个版本即可。

保存工作现场

有时我们当前分支的任务还没有做完,但是需要立刻去别的分支上完成一些工作,本分支的任务没有完成,也没法提交,如何保存当前的工作现场呢?我们可以使用如下命令

git stash

保存现场后,我们就可以切换到别的分支去完成任务,等工作完成后,再切换回本分支,然后执行

git stash apply

或者

git stash pop

命令来恢复工作现场。保存的工作现场可以使用git stash list命令查看。以上两个命令的区别是apply命令再恢复后不会删除之前保存的工作现场,可以使用git stash push来删除;而pop命令再恢复的同时会删除掉stash内保存的工作现场。

忽略文件

有一些文件并不能上传到git上。比如我们npm install 安装之后有的node modules
所以需要在项目的根目录下创建一个名称为.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。

码云的使用

为什么要使用码云呢,因为码云是中文的,并且它更适合多人协作,一个组织的管理。

同样的使用方法和github很类似,首先得注册一个码云账号。接下来就是配置SSH,和github过程基本一样。

git常用命令总结

mkdir XX (创建一个空目录 XX指目录名)
pwd 		显示当前目录的路径。
git init          把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
git add XX       把xx文件添加到暂存区去。
git commit –m “XX”  提交文件 –m 后面的是注释。
git status        查看仓库状态
git diff  XX      查看XX文件修改了那些内容
git log          查看历史记录
git reset  --hard HEAD^ 或者 git reset  --hard HEAD~ 回退到上一个版本
(如果想回退到100个版本,使用git reset –hard HEAD~100 )
cat XX         查看XX文件内容
git reflog       查看历史记录的版本号id
git checkout -- XX  把XX文件在工作区的修改全部撤销。
git rm XX          删除XX文件
git remote add origin https://github.com/StefanPython/demo.git 关联一个远程库
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
git clone https://github.com/tugenhua0707/testgit  从远程库中克隆
git checkout –b dev  创建dev分支 并切换到dev分支上
git branch  查看当前所有的分支
git checkout master 切换回master分支
git branch -m newname 修改当在分支
git branch -m oldname newname 修改其他分支名字
git merge dev    在当前的分支上合并dev分支
git branch –d dev 删除dev分支
git branch name  创建分支
git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list 查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop 恢复文件的同时 也删除文件
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
git push origin master  Git会把master分支推送到远程库对应的远程分支上
git branch --merged显示已经全部合并到当前分支的分支
git branch --no-merged显示没有合并到当前分支的分支
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
查看日志:
                git log
                有更好的格式 git log --pretty=oneline
                查看所有操作日志git reflog
版本回退:
                git reset --hard head^ 回到上一个版本
                git reset --hard 版本号 想回到的版本号
                获得版本号的命令 git reflog
撤销上一次的修改(未提交的并且是在缓存区的):
                git checkout  -- 文件名  在暂存区修改文件未提交,可用此命令撤销当前未提交的修改,如果有多个文件修改需要撤销  git checkout -- .
                git reset --hard head 定位到当前提交状态指针,当一个暂存区文件修改后未提交时等同于git checkout -- 文件名
     注意:命令git checkout -- readme.txt 中的 -- 很重要,如果没有 -- 的话,那么命令变成创建分支了。
               只要没有commit都可以还原
连接远程仓库:
                  git remote add origin1 https://github.com/xfy007/gitsecond.git  添加测试用的远端仓库
                  git push -u origin1 master  每次我们要提交代码到服务器上时,都会使用到git push。git push命令会有两个参数,远端仓库的名字,以及分支的名字
                 由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。经后可直接git push
从远程仓库克隆:
               git clone https://github.com/xfy007/gitsecond.git

总结创建与合并分支命令如下:
          查看分支:git branch
          创建分支:git branch name
          切换分支:git checkout name
          创建+切换分支:git checkout –b name
          合并某分支到当前分支:git merge name
;          删除分支:git branch –d name

保存工作现场:
        当一个分支上的工作还没完成,不能提交时,但是有一个bug需要我再主分支上新建一个分支去解决,所以用到
        git  stash 来保存工作现场
        git status 查看没有未提交的工作
        要恢复工作现场 方法一:git stash pop (恢复并删除stash内容)法二:git stash apply(恢复)   , git stash drop(一个个删除)
查看SSH公钥的相关命令:
ssh-keygen  重新生成SSH公钥
cd ~/.ssh 切换到.ssh目录下
ll -a 查看.ssh下有哪些文件
cat ~/.ssh/id_rsa.pub  查看ssh  key

git 相关概念的理解

工作区:
将一个文件夹通过git init 设置成一个git可以管理的文件夹时,这个文件夹里的内容就是工作区。
暂存区:
暂存区,叫stage 或者 index ,是用来暂时存放工作区中修改的内容;可以理解为一个中转站
版本库:
通过git init 会生成一个隐藏的文件.git,这个,git里的东西就是版本库
master:
master是主分支,当我们git init后,并不会立刻产生master,
而是我们添加了一个文件,并git add .,git commit后

这时我们查看分支情况,便可以看到master分支了。(分支都存放在.git/head/refs目录下)
HEAD:
HEAD是一个引用,引用的是当前的分支,如果当前处于master分支,那么HEAD就会指向master。
注:对三个区(工作区,暂存区、版本库)有影响的几个命令

git add   当我们使用git add 指令时,就是将对应修改的文件添加到暂存区中
这时,暂存区中的目录树被更新。

git commit 我们使用git commit指令,便会将暂存区中做出的修改提交到版本库中
这时master指向的分支被更新。

git reset HEAD  当使用git reset HEAD 指令时,版本库的内容会回退到暂存区。

git checkout --file 使用git checkout --file时,是将工作区指定修改的文件被暂存区的内容覆盖(消除所有工作区进行的改动),这个动作很危险。
git checkout . 也是如此,该指令是将所有修改的文件被暂存区的内容覆盖。

git rm --cached 使用git rm --cached file时,直接从暂存区进行文件的删除,不会影响工作区的内容。

git checkout HEAD --file 会将版本库中的对应的文件内容直接替换工作区和暂存区中的该文件。
这个动作也是危险的,同样git checkout HEAD . 是将所有的内容替换工作区和暂存区的文件。

查看三个分区的区别:
git diff 查看工作区和暂存区的区别
git diff –cached 查看暂存区和版本库之间的区别
git diff HEAD 查看工作区和版本库之间的区别
git status 查看当前的工作状态

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值