git简述和使用

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

  • 使用git已经很久,但从未整体总结过,这次就对git的进行一次总结和思考。

一.为什么要使用git

  • 方便 版本控制
  • 版本控制:记录项目的所有变化,以方便查阅,回退。

二.版本控制的分类

  • 本地版本控制:复制整个项目,同时手动进行版本记录,比如1.0.02.0.0进行区分和管理。
  • 集中式版本控制:用一个中央服务器保存所有的版本记录,其他人从这取出文件,或者提交文件。
  • 分布式版本控制:每一人都拥有着当前项目的所有版本记录。修改和其他操作在本地进行,可以将自己的修改推送给别人。
  • 基于差异的版本控制:保存每个文件随着时间的差异记录。

三.git文件状态

  • 未跟踪: 没有被git记录的文件,比如.gitignore中的文件。新增的文件往往没有被跟踪,需要被add,加入暂存区,commit保存进git数据库中进行跟踪。类似与 修改(modified) 状态

  • 已跟踪: 纳入版本控制的文件。只有已被纳入版本控制的文件,才有下述三种状态。

    • 修改(modified): 在工作区修改文件。还没有进行 add 操作。

    • 暂存(staged): 已经进行 add 操作,把修改的文件进行标记,放到 暂存区。未commit进行保存。

    • 提交(commited): 已经进行commit,将 暂存区 的文件提交到本地数据库。

  • git status查看当前工作区的状态。

    • 工作区无任何修改:
       On branch main
       Your branch is up to date with 'origin/main'.
    
       nothing to commit, working tree clean
    复制代码
    • 工作区有修改的情况, .gitignore文件被修改了,需要进行add进入暂存区,commit进行提交。或者restore进行撤回操作。node_modules/下的文件未被跟踪,需要进行addcommit
    On branch main
    Your branch is up to date with 'origin/main'.
    
    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:   .gitignore
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            node_modules/
    
    no changes added to commit (use "git add" and/or "git commit -a")
    复制代码
  • 查看当前状态简略版:git status -s。M已修改文件,?? 未被git追踪文件,A暂存区文件

 M .gitignore
?? node_modules/
复制代码

四.查看文件的修改

  • git diff: 查看已在暂存区的文件和未暂存的文件做了哪些修改
diff --git a/.gitignore b/.gitignore
index 960be9a..0e9b283 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
-node_modules
-package-lock.json
-yarn.lock
\ No newline at end of file
+# node_modules
+# package-lock.json
+# yarn.lock
\ No newline at end of file
复制代码
  • git diff --staged: 查看已暂存(add) 的文件和 已提交(commited) 的文件有哪些变化。

五.暂存区

1.加入暂存区

  • git add .:将当前目录下的所有文件修改加入暂存区
  • git add -u: 将已被追踪的文件修改加入暂存区,可追溯上级目录。
  • git add -A: 将所有文件修改加入暂存区,可追溯目录修改,比如在目录第一层新增文件,现在处于目录的目录的目录,那么git add -A会找到最上一层的文件修改进行暂存。

2.撤销暂存区

  • git reset HEAD [file]: 撤销加入暂存区的指定文件
  • git reset HEAD *:撤销加入暂存区的所有文件,在Mac中不包括.开头的文件
  • git reset HEAD .*: 撤销加入暂存区的.开头的文件
  • git rm:加文件名或者目录或者正则匹配,移除暂存区
  • git rm -f:强制移除,连文件都直接删除(尽量不要使用)
  • git rm --cached:只是移除暂存区,不删除文件

六.提交文件

1.提交文件的操作:

  • git commit: 提交文件,接下来填写修改信息。
  • git commit -m: 提交文件同时填写修改信息。
  • git commit -a: 跳过暂存区,直接提交文件,等于跳过了git add操作

2.提交不可撤销,但可以替换

  • git commit --amend: 第二次的提交将替换第一次的提交,最终只会有一个体交

七.移动文件(更多是用来重命名)

  • git mv file_from file_to

八.查看提交历史

  • git log: 查看提交历史。

  • git log -p: 查看提交历史和差异,会特别长。

  • git log -p -2: 查看提交历史和差异,并限制日志条目,只显示最近两次的提交。

九.远程仓库

  • git clone [url]:克隆远程仓库
  • git remote: 查看所有的远程仓库,origin是默认远程仓库名

扫描二维码关注公众号,回复: 13464107 查看本文章
  • git remote -v: 显示远程仓库名和地址

  • git remote add [shortname] [url]: 添加远程仓库,同时指定一个shortname来简称它

  • git fetch [shortname]: 拉取远程[shortname]仓库中本地没有的信息,但并不会合并到本地中,需要手动合并。比如,本地长裤会有一个master分支和一个origin master分支。fetch会拉取远程仓库的master分支到本地的origin master而不会到master。如果需要,需要手动merge合并。但是pull命令则会同时更新本地的masterorigin master。如果有冲突,则会直接提示。

  • git push [remote] [branch]: remote表示远程仓库名字,branch表示分支,不指定默认当前仓库的当前分支。

  • git remote show [remote]: remote表示远程仓库名字,查看远程仓库的信息,默认当前仓库。

  • git remote rename [newname] [oldname]: 仓库重命名

  • git remote remove [name]: 移除远程仓库

十.分支

1.新建分支

  • git checkout -b [newbranch]: 从当前分支中克隆一个新分支,等同于
git branch [newbranch]
git checkout [newbranch]
复制代码

2.切换分支

  • git checkout [branch]: 从当前分支切换到[branch]分支

3.查看分支

  • git branch: 查看当前分支。*号的表示当前分支

  • git branch -v: 查看当前分支的最后一次提交

4.合并分支

  • git merge [branch]: 当前分支合并指定的[branch]分支。如果遇到冲突,需要手动打开冲突的文件,进行解决。解决完之后,需要用git add 命令进行暂存。

  • git rebase [branch]: 变基合并,与merge不同的是,rebase会对比当前分支和指定分支[branch]的共同父分支。将指定分支[branch]作为基底,将修改的部分作为记录放在指定分支,即基底的后面,而不是形成一条新的分支记录。等同于git rebase [basebranch] [topicbranch]

  • git rebase --onto [A] [B] [C]: A,B,C是三个分支名。让C分支带着B和C共有的分支记录,合并进A分支记录的后面。

5.删除分支

  • git branch -d [branch]: 删除指定的分支,或者使用git branch -D [branch]

猜你喜欢

转载自juejin.im/post/7035642340098179085