Git常用命令解释

本文记录学习git命令行的过程和命令的解释

执行git status的信息解释

Changes to be committed:只要在 Changes to be committed 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件在你运行 git add 时的版本将被留存在后续的历史记录中
Changes not staged for commit :说明git已跟踪文件的内容发生了变化,但还没有放到暂存区。 通俗理解就是在工作区发生了改动的文件但是没有被暂存
Untracked files:未追踪的文件

Git基本操作

Git已追踪的文件一般处于三种状态,分别是已提交、已修改和已暂存。
这里说一下在各个操作时被git管理的文件的状态
如果你的项目使用git init初始化了,那么git将会开始工作。但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪(untracked)。
将文件/夹交给git追踪:git add 可以使用该命令将文件交给git进行追踪,执行完该命令之后该文件将被存放到暂存区
将文件从暂存区回退到工作区(取消暂存的文件):git reset head 使用该命令将文件从暂存区回退到工作区,或者 使用git restore --staged 也可以取消你在暂存区的文件
将文件添加到暂存区:git add 是的,同样使用add命令,这里需要解释的是,当你将文件添加到暂存区时,git记录的是在你执行该命令时该文件的修改状态!如果你在添加到暂存区之后仍然修改了该文件,那么之后的修改记录是不会被暂存区保存的,只会在工作区提示你对该文件做了改动,如果你需要将之后的修改也添加到暂存区,需要重新执行该命令!
查看当前文件的改动:git diff 该命令可以查看你工作区的文件的改动,准确的说,如果你只键入git diff 的话,它查看的是你工作区中尚未暂存的改动,如果你在工作区修改了A文件,然后将A添加到暂存区之后,使用git diff A时将不会看到任何改动,这是因为该文件已经被添加到暂存区了。如果你想查看暂存区的文件改动情况,可以使用可以用 git diff --staged 命令(或者git diff --cached,等价)。 这条命令将比对已暂存文件与最后一次提交的文件差异
直接从工作区中提交:git commit -a -m “” 该命令主要关注-a, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交。记住,是所有在工作区已改动的文件,如果你仍然不想一次性提交所有文件,那么就不要使用该命令
删除git追踪的文件:git rm 使用此命令删除被git管理的源文件,但如果该文件在执行命令前发生过改动,则无法直接删除,可以添加–cached解除git追踪或-f强制删除
不让git追踪某个文件/夹,但保留文件/夹:git rm -r --cached ,使用该命令可以将已追踪的文件取消追踪,但不会删除源文件
移动文件或重命名:git mv 该命令可以重命名或移动文件 具体参见pro git
查看提交日志:git log 该命令涉及较多子参数,具体参见pro git
撤销操作(修正你的提交):git commit --amend如果你刚刚提交了一次,但是后来你发现刚刚的那次提交文件不全,例如少提交了一些文件或者提交信息写错了,你可以使用该命令来修正你的这次提交。该命令会将你当前暂存区内的文件进行提交,并且会启动一个文本编辑器,你可以修改本次提交的message,:wq!退出该编辑器时,git会将你刚才暂存区内的文件进行提交,这个提交和你刚才提交的commit是同一个(记住,只有没push时才可以进行该操作!不然不会合并成同一个commit)
撤销你在工作区的修改:git restore ,这个命令会撤销你在工作区的所有改动,如果你指定的文件在暂存区则不受到影响。另外使用git checkout – 可以达到同样的效果。原理是是Git 会用最近提交的版本覆盖掉它,不过暂存区的文件不受影响。(不要对暂存区的文件做该操作,没用)

Git仓库/分支相关

git fetch <仓库> <分支名>:该命令将会从远程仓库的指定分支中拉取你本地没有的数据,执行完成后不会自动合并,需要你手动进行合并操作
git pull <仓库> <分支名>:该命令拉取远程仓库中指定分支的数据到你当前分支中,如果拉取的某个文件和你本地的工作区有冲突文件git将不会执行合并而是提示你先提交或暂存后再进行操作。如果你本地已经提交了A文件,但是拉取的A文件已经被别人修改了,这个时候如果修改的不是同一处则git会自行处理,否则需要你手动合并后并提交
git push <仓库> <分支名>:将你本地仓库的提交推送到远程仓库中,很简单的一个命令,但是有时会被提示拒绝push,这是因为当你和其他人协同工作时,他们先推送到远程仓库然后你再推送到远程仓库,你的推送就会毫无疑问地被拒绝(这里和涉不涉及到同一个文件没有任何关系)。你必须先拉取远程仓库的最新改动,然后再push。tips:该命令其实是一个简写,实际上是git push <远程仓库> <本地分支>:<远程分支> ,意思是将本地的本地分支推送到远程仓库的远程分支上
更改远程仓库的名字:git remote rename 我们知道clone下来的仓库默认叫origin 如果你想修改远程仓库的名字,使用git remote rename origin XXX即可。值得注意的是这同样也会修改你所有远程跟踪的分支名字。 那些过去引用 origin/master 的现在会引用XXX/master。
移除远程仓库:git remote rm/remove <仓库名> 如果你想移除一个远程仓库,可以使用该命令,但是请慎重,一旦你使用这种方式删除了一个远程仓库,那么所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除。
添加远程仓库:git remote add 该命令可以添加一个远程仓库,shortname则是你设定的别名
创建分支:git branch <分支名>,使用该命令创建一个新的分支,新分支起点为你当前所在分支的最新commit
切换分支:git checkout <分支名> 使用该命令切换到指定分支
快速创建一个分支并切换到该分支:git checkout -b <分支名> 该命令可以创建一个新分支并切换到新分支中
删除分支:git branch -d <分支名> 使用该命令删除分支,git branch -D <分支名>是强制删除。
合并分支:git merge <分支名> 该命令会将指定的分支合并到你当前所属的分支(也就是HEAD所指向的分支),如果出现冲突,需要解决冲突。
查看分支:git branch 该命令查看当前本地所有分支
查看分支并且显示每个分支的最后一次提交:git branch -v 该命令和上一个查看分支差不多,只是显示的信息要多一些,会显示出每个分支的最后一次提交的SHA1和提交message,更直观
关于–merged和–no-merged:该命令是和git branch [选填–merged和–no-merged]一起使用的,首先它的作用是以你当前所在分支为参照物,–merged查看其他哪些分支是已经合并到当前分支的分支,–no-merged查看其他哪些分支是未合并到当前分支的分支(查看所有包含未合并工作的分支)。一般来说,那些已经合并到当前分支的分支是可以删除的(这里的删除分支命令依然是以你当前所在分支为参照物的),因为你已经将它们整合到了当前的分支中,删除它并不会失去任何东西。但是如果你使用删除命令去删除未合并到当前分支的分支时会被拒绝,因为你删除的目标分支中包含了未合并的工作,除非你使用强制删除git branch -D <分支名>,不然还是谨慎操作,你可以尝试先合并一下。
提示:你可以在使用该命令时提供一个附加的参数而改变当前分支参照物。例如,你当前在dev分支,你想查看尚未合并到 master 分支的有哪些?使用git branch --no–merged master 查看从而避免切换到master分支

远程跟踪分支的概念

远程跟踪分支是远程分支状态的引用。它们是你无法移动的本地引用。一旦你进行了网络通信, Git 就会为你移动它们以精确反映远程仓库的状态。请将它们看做书签, 这样可以提醒你该分支在远程仓库中的位置就是你最后一次连接到它们的位置。它们以 / 的形式命名。比较常见的是 origin/master,该分支就是一个远程追踪分支,一般地,执行git fetch origin master之后,git就会从远程仓库抓取本地没有的数据,移动 origin/master 指针到更新之后的位置,你可以手动合并该远程分支到你的本地分支上。
一般地,如果你刚加入一个项目,该项目中其他成员都维护着一个分支A,那么你拉取该项目的时候,你本地是不会有A分支的,本地只会存在一个远程跟踪分支origin/A–它是一个不可修改的指针,那么你得需要在本地建立一个分支关联到该分支,使用git checkout -b <建立的分支名> /
例如 git checkout -b dev origin/dev 这会在你本地新建一个分支dev并且关联到远程跟踪分支origin/dev,该分支的起点为origin/dev上的最新commit(并不是你当前所在本地分支的最新commit)
如果你想把已经存在的本地分支关联到远程跟踪分支,可以使用git branch --set-upstream-to=origin/remote_branch your_branch命令,例如你本地有分支K,你想把分支K关联到远程跟踪分支origin/dev,首先先切换到K分支,然后执行git branch --set-upstream-to=origin/dev 即成功设置

你可能感兴趣的:(Git,git)