持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
代码创建、修改、删除及拉代码
新文件与修改
$ ls
README.md
$ touch file1.txt
$ git add file1.txt
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: file1.txt
$ git commit -m "[+]add new file1.txt"
[master 66cc488] [+]add new file1.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1.txt
上图操作包含:
- 创建新文件file1.txt
- add 添加修改的内容到索引
- status 查看修改的内容
- commit 把索引提交到本地分支
git add .
:监控工作区的状态树,此命令会把工作区的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u
:他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写),我们在写一个的新的功能创建了一些新的代码文件,我们暂时不想提交这些代码,这种情况下就可以考虑此命令
git add -A
:是上面两个功能的合集(git add --all的缩写),一般新创建和删除的文件都是要加到暂存区的,所以我们通常直接用这个命令就可以了。
git show 列出最近一次的提交
对于commit:像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
删除文件
$ ls
README.md file1.txt
$ git rm file1.txt
rm 'file1.txt'
$ ls
README.md
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: file1.txt
$ git commit -m "[-]delete file1.txt"
[master e278392] [-]delete file1.txt
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 file1.txt
上图操作包含:
- 创建新文件file1.txt
- git rm 删除file1.txt文件
- status 查看修改的内容
- commit 把索引提交到本地分支
tip1: 如果没有用git rm删除文件,在本地删除文件后,git add一下再提交可以达到同样的效果
拉代码方法一 pull
$ git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:pzqu/git_test
5fd4d8f..7b54a8a master -> origin/master
Merge made by the 'recursive' strategy.
share_file.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 share_file.txt
上图命令:
- git pull
查看本地仓库变化git log
上图可以看到向远程仓库pull的时候,出现了两个新的commit,commit 7b54a8ae74...
的提交信息为Create share_file.txt
,另一个commit fdbb19cf4c51770
的提交信息为Merge branch 'master' of github.com:pzqu/git_test
。事实上主线只有一个提交,为什么会出现这种情况? 是因为pull其实会做两个操作
- 拉远程仓库代码到本地
- 自动与当前分支合并并生成一个合并成功的提交
注意这里的第二个个步骤如果远程有人和你改了同一个文件就会出现一个冲突,这个时候git会提示你哪些文件有冲突,手动改了再提交一次就可以了。详情见合并冲突
拉代码方法二fetch
我在远程修改了文件,向share_file.txt
加了一行内容tom modify
,此时拉代码。
$ git fetch
$ git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: [+]add new file1.txt
Applying: [-]delete file1.txt
上图所示有以下两个操作
- fetch 拉取远端代码到本地
- rebase 把本地代码提交基于远端分支重新replay
效果如下:
上图是git log
所输出的提交内容,刚刚pull的时候忘记把pull自动产生的merge提交到远程,rebase的时候把本地的提交放到了远程提交之后,看起来就是一条直线,比较优雅,也是推荐的方式。
同样的,如果在拉代码的时候,有另一个人也向远程仓库提交了代码,恰好你们的代码都是修改的相同的文件,这就会发生一个冲突,必须要你来亲自决定哪些代码留下哪些代码删掉,详情我们会在以后的文章合并冲突和大家一起分析,这次我们摒弃杂念,只考虑一个人的情况下。