前言
博主在[①Git]: Git简介以及基本的工作流程一文中介绍了Git的基本概念和工作流程,在本篇博客就通过对一个名为git_training项目的操作,分享下一些Git常用命令。
Git常用命令总结
1. 新建project项目和第一次推送提交
首先是新建project项目,登入GitLab,点击New project这个按钮:

输入project名称,在Visibility Level中选择该项目的可见等级,比如选择Public,该项目是公开的。
然后点击Create project按钮,就能成功创建一个空的project:
然后我们在本地创建了一个名为git_training的文件夹,里面包括两个文件:CMakeLists.txt和main.c。
将整个文件夹上传到git_training项目中,作为第一次的提交。

首先Git全局级配置,xxx部分为用户自定义:
git config --global user.name "xxx"
git config --global user.email "xxx"
进入git_training文件夹后,在本地创建新的Git仓库:
git init
然后会生成.git文件夹,初始化空的Git仓库完毕,然后将本地仓库连接到远程Git仓库,xxx部分是git_training项目的URL:
git remote add origin git@xxx/git_training.git
然后将git_training文件夹下的所有文件添加到暂存区,进行版本管控:
git add . # . 为当前目录所有文件
然后将暂存区内容添加到本地仓库:
git commit -m "Initial commit"
最后将内容推送到远程仓库master分支,因为是新创建的项目,一开始默认都是master分支:
git push -u origin master
在GitLab中我们就能看见,它不再是一个空的project,有了CMakeLists.txt和main.c这两个文件。
2. git clone 克隆Git仓库
完成git_training project创建和第一次提交之后,我们就能在其他服务器上将该项目的内容克隆下来(包括它整个内容历史), xxx为该项目的URL。
git clone xxx
3. git status 查看文件状态
git status命令可以查看当前本地项目中文件的状态,会显示以下的信息:当前分支的名称,当前分支与远程分支的关系(比如分支的内同是否是一致的),拟提交的变更(文件已经在暂存区,准备使用git commit命令提交变更) 和未跟踪的文件(比如说新创建的文件)等。
git status
例如我们修改原有的main.c文件和新创建main.h文件会下面类似的内容:

其中main.c文件显示为modified,类似的状态描述还有added,deleted,renamed,ignored等。
另外git status命令还可以使用
以精简的方式显示文件状态:
git status -s
列出被忽略的文件,如本例中未被跟踪的main.h文件:
git status --ignored
4. git add 跟踪新文件
git add是多功能命令,根据目标文件的状态不同,命令的效果也不同。它可以把新创建的文件添加到暂存区,对文件进行版本管理;或者把已跟踪文件的修改放到暂存区等。
git add [files]
比如,我们可以用git add添加新创建的main.h,然后用git status命令查看状态,main.h会显示为new file:

另外git add命令还可以使用
提交当前目录所有文件变化到暂存区,包括文件修改(modified)以及新文件(new file)等(从git version 2.x开始,git add . 也会提交被删除的文件(deleted)):
git add .
与当前目录相对的,提交整个工作区(即整个git_training文件夹)的文件变化:
git add --all
git add -A
5. git commit 提交本地仓库
git commit命令将暂存区内容提交到本地仓库中。
比如说提交暂存区,并指定提交信息:
git commit -m [message]
如果已跟踪文件做了修改的话,一般先用git add命令将修改放到暂存区,再用git commit命令提交。另外我们也可以在用git commit命令时加个 -a 参数,表示将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,这样就可以不先使用git add命令(当然新创建文件一定要先使用git add):
git commit -a -m [message]
如果不加 -m 参数的话,Git会默认启动编辑器来添加提交信息,比如:
git commit -a
这里博主习惯用vim编译器,修改Git默认编辑器的命令:
git config --global core.editor "vim"
6. git push 推送远程仓库
git push命令将本地仓库分支的更新,推送到远程仓库的一个分支:
git push [远程主机名] [本地分支名]:[远程分支名]
如果本地分支名称与远程分支名称相同,可以省略:符号:
git push [远程主机名] [本地分支名]
远程主机默认名称为origin,比如将本地的master分支推送到远程origin主机的master分支:
git push origin master
相当于:
git push origin master:master
如果当前本地分支已经在master分支上了,那么本地分支名称也可以省略:
git push origin
另外 -u 参数可以指定一个默认主机,记得之前第一次推送提交时,已经用过git push -u origin master命令了,所以主机的名称在之后的推送也可以省略,直接用:
git push
另外git push命令还可以使用
如果远程分支跟本地分支版本内容有差异,一般要先用git pull命令将远程分支拉取下来,在本地消除差异后才能推送,另外我们可以加 --force 参数强制推送:
git push --force origin master
不管是否存在对应远程分支,将本地的所有分支推送到远程主机:
git push --all origin
删除远程主机的分支可以使用 --delete 参数,比如删除远程主机的master分支:
git push origin --delete master
7. git pull 拉取远程仓库
git pull命令的作用就是,拉取远程主机某个分支的更新,再与本地的指定分支合并。git pull命令就是git fetch命令和git merge两个命令的合并。
跟git push命令基本同样的格式:
git pull [远程主机名] [远程分支名]:[本地分支名]
比如取回origin主机的next分支,跟本地的master分支合并:
git pull origin next:master
当然当前本地分支跟远程分支能唯一对应上的话,就能简写成:
git pull
8. git branch 分支管理
几乎所有的版本控制系统都支持分支。 使用分支意味着为我们可以把工作从开发主线上分离开来,以免影响开发的主线。
创建本地仓库分支:
git branch [分支名]
比如说创建个名为next的本地仓库分支:
git branch next
如果要查看分支,-a 参数表示查看所有分支,包括本地仓库分支和远程仓库分支:
git branch -a
比如我们可以看见刚才创建的next本地分支,但当前分支还是在master分支上:

-r 参数可以查看所有的远程分支:
git branch -r
本地仓库分支重命名:
git branch -m [旧分支名] [新分支名]
删除本地仓库分支:
git branch -d [分支名]
切换本地仓库分支:
git checkout [分支名]
比如切换到next分支:
git checkout next
这里也可以把创建本地仓库分支跟切换合并在一起:
git checkout -b [分支名]
将本地仓库分支next推送到远程仓库:
git push origin next # 远程仓库没有next分支的话会创建个
git push --set-upstream origin next # 本地分支与远程分支进行关联
用branch命令查看的话就能看到远程分支origin/next:

一旦某个分支有了独立内容,我们最终会希望将它合并回我们的主分支,分支的合并命令是:
git merge [分支名]
比如将next分支的修改合并到master分支,先要切换到master分支,然后:
git merge next
9. git rm 移除文件
git add命令可以将文件放入暂存区,当然我们也可以将文件移出暂存区,不做版本管理。
同时从工作区和暂存区中删除文件,即本地文件也被删除了:
git rm [files]
git rm -f [files] # force
从暂存区中删除文件,但是本地文件还在,只是不做版本管理:
git rm --cached [files]
10. git checkout 放弃本地工作区修改
这个命令也是博主有时候会用到的😓,如果我们在本地工作区对某个文件进行了修改,但是代码改来改去还不如之前的,所以想放弃修改,恢复到上次commit的版本,可以使用:
git checkout [files]
如果放弃工作区所有文件的修改:
git checkout .
11. git log 历史记录信息
我们可以使用git log命令查看历史记录信息:
git log
例如:

12. git reset 撤销提交操作以及回退
在用git commit命令提交本地仓库之后,如果后悔了,想撤销最近一次提交可以使用命令:
git reset # 不带参数
如果想回退到某次commit,需要先用git log命令查看提交历史,获得上图中黄色的commit ID(例如Initial commit的:7ce9ff51c24ebce7719ce645bf7bd89163e3a730),然后回退有三种模式:
git reset --soft [commit ID] # 之后文件的修改内容还在,文件暂存区保留文件修改(类似保留了最近一次git add命令),不轻易删除代码
git reset --hard [commit ID] # 完全回退删除,影响本地文件,慎用,之后的commit和修改全部丢失
git reset --mixed [commit ID] # 默认模式,之后文件的修改内容还在,文件暂存区不保留文件修改,自行决定是否运行git add命令,不轻易删除代码
13. git stash 修改暂时保存至堆栈
因为是多人协作开发的项目,很可能遇到这样的场景,不同的两个人A和B修改了同一个文件,其中A已经将代码先上传到远程仓库,然后B想从远程仓库拉取代码的时候,就会有冲突,显示下面类似的内容:

那么B首先要获得一个相对干净的工作区,才能拉取远程仓库的代码,git stash命令就完美解决了这个问题,它可以将当前未提交的修改(工作区和暂存区的修改)都暂时储存起来,保存至堆栈中:
git stash
运行完后,B会发现他的修改都不见了,所有内容都回退到上次的提交,获得了相对干净,与远程仓库没有冲突的工作区,然后他就可以拉取代码,然后恢复B的修改可以使用命令:
git stash apply
运行完成后,必定某个文件会显示有冲突,类似下图,然后B可以继续解决冲突,跟A商量,到底用谁的代码。

14. git tag 标签管理
tag有助于版本的管理。
列出所有标签:
git tag
制作本地标签:
git tag -a [标签名称] -m [附注信息]
将标签推送到远程仓库:
git push origin --tags # 推送所有本地标签
git push origin [标签名称]
删除本地和远程仓库标签:
git -d [标签名称]
git push --delete origin [标签名称]
本文详细介绍了Git中常用命令,包括新建项目、克隆仓库、查看文件状态、添加文件、提交、推送、拉取、分支管理、移除文件、检查点和gitstash等内容,帮助读者掌握Git的核心功能。
258

被折叠的 条评论
为什么被折叠?



