写给新人的git入门攻略

647 阅读4分钟

最近新入职了几个实习生,都没有接触过git,借此机会写一篇文章,让0基础的新人也能初步掌握git的使用,满足日常的开发工作。如果想对git进一步的了解与学习,可以看看大佬的文章

拉取远程库代码

首先是拉取项目的远程库代码git clone 远程库地址。 (后面都用这个demo的地址做演示)

git clone https://gitee.com/wk233/git-test.git

提交本地的修改到远程库

提交修改的内容到远程库,需要用到以下命令:git addgit commitgit push

这里先说一下git的两个概念,工作区暂存区

0.jpg

本地所有的改动都是在工作区,上图中版本库内的stage就是暂存区,假如我在本地修改了index.html文件中的内容,提交本地修改的流程如下

首先可以执行git status,这个命令可以用来查看当前状态

On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html

可以看到git检测到index.html这个文件是被修改了的,现在需要执行git add将修改添加到暂存区

git add index.html

这时候改动已经添加到了暂存区,继续使用git status查看状态

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   index.html

下一步使用git commit将暂存区的文件提交到本地当前分支,-m后填写本次提交的备注信息

git commit -m 'test message'

再次执行git status查看状态,暂存区的内容已经成功提交

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

最后一步,执行git push将本地分支的改动提交到远程库

git push

再再次执行git status查看状态

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

现在本地的修改已经提交到了远程库,简单的流程就是这样。但是实际工作中代码库一般都是有多个分支,且有多人一起开发的,下面就介绍在实际工作中git具体的应用

创建/切换/删除本地分支

执行git branch可以查看本地分支,从远程仓库拉下来默认的是master分支,*代表当前所在的分支

$ git branch
* master

创建一个新的dev分支

git branch dev

再此执行git branch查看分支

$ git branch
  dev
* master

通过git switch <branchName>或者git checkout <branchName>命令可以切换分支(推荐使用switch),如下切换到了dev分支

$ git switch dev
Switched to branch 'dev'

git switch -c <branchName>或者 git checkout -b <branchName>创建并切换到新的分支

git switch -c another

再查看一下本地分支情况

$ git branch
* another
  dev
  master

删除本地分支(删除当前分支前需要切换到其他分支)

git branch -d another

再次查看本地分支

$ git branch
* dev
  master

拉取远程仓库上本地不存在的分支

实际工作中经常会有版本的迭代,一般会创建一个新的分支,而这个分支在你本地是不存在的,这个时候就需要用到git switch -c 本地分支名 origin/远程分支名

假设远程仓库新建了一个hotfix分支,首先执行git pull同步一下

$ git pull
From https://gitee.com/wk233/git-test
 * [new branch]      hotfix     -> origin/hotfix
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> dev

然后创建本地hotfix分支并与远程库建立联系

git branch hotfix origin/hotfix

也可以直接创建并切换到hotfix分支

git switch -c hotfix origin/hotfix

最后执行git pull同步hotfix分支的代码就OK了

提交代码

提交本地全部改动

假如我在本地修改了index.js和index.css两个文件,提交流程如下

将全部改动的文件添加至暂存区,然后提交到本地库

git add .
git commit -m 'some message'

要注意的是,推送代码到远程库之前一定要先拉取一次代码,否则可能会覆盖其他人的提交。

git pull --rebase

最后再将本地的提交推送到远程仓库

git push

提交部分修改的文件

假如我在本地修改了index.js和index.css两个文件,但是只想提交index.js这一个文件,方法如下

将需要提交的文件先添加到暂存区并提交(顺便说一下git命令行中粘贴的快捷键是 Ctrl+Shift+Insert)

git add index.js
git commit -m 'message'

之前说过推送代码之前必须先拉取一次,但这个时候你执行git pull --rebase的时候会发现报错了

$ git pull --rebase
error: cannot pull with rebase: You have unstaged changes.
error: please commit or stash them.

解决方法就是将文件的改动保存到本地缓存区

git stash save 'some message'

再次执行git pull --rebase就不会报错了

$ git pull --rebase
Current branch hotfix is up to date.

将本地的提交推送到远程仓库,本地推送完成

git push

当然,还需要将刚才放在本地缓存区的内容还原,使用git stash list 可以查看本地缓存的内容列表

$ git stash list
stash@{0}: On hotfix: some message

还原缓存内容,git stash pop还原索引为0的本地缓存内容

git stash pop

或者使用 git stash pop stash@{index}还原指定版本

git stash pop stash@{0}

OK,刚刚在本地缓存的内容已经成功还原了

总结一下,推送代码之前一定要先拉取,不需要提交或者暂未完成的改动可以在本地缓存