主要总结可能用到的git命令
尝试新建一个git仓库
在当前文件夹新建一个仓库
首先在文件夹中使用git init
命令。这会创建一个 .git 文件,包括了进行初始化git仓库的全部文件。克隆已有的项目
在某个文件夹下,使用git clone <url>
或者自定义本地仓库名字git clone <url> <myProjectName>
检查文件的状态
- 检查文件的状态:
git status
- 对比文件的区别:
git diff
将对比当前工作区的文件和暂存区的文件的差异。而git diff --cashed
可以比较暂存区与最后一次提交的区别。 - 删除暂存区的文件:可能我们希望删除一些文件,比如我删除了一个未被追逐的工作区的文件,但是这个文件已经被暂存了。因此,我需要反向的使用
git rm <fileName>
操作。 - 查看提交之间的差别:
git log -p -2
-p表示–patch,以补丁的形式显示最近两条提交的区别。log --all --graph --decorate
: 可视化历史记录(有向无环图)这也是我最常用的 - 如果提交以后发现有些小的问题可以重新提交:比如添加一些内容,然后执行
git commit --amend -m "fix"
。比较适合发现少提交的东西,或者需要改一下注释。 - 取消暂存的文件:
git reset HEAD <file>...
这个命令可以取消暂存区的某个文件,相当于撤销了某一步的add。 - 取消对文件的修改:
git checkout -- <file>
,这个用最近提交的版本覆盖掉工作区和暂存区。
远程仓库
远程仓库中需要区分本地分支和远端分支的概念,本地分支是指自己的三区达成一致以后的内容。
- 查看远程仓库:
git remote -v
,可以得到远程仓库及其对应的url。git remote show <remote>
可以看到更多的详细信息。 - 添加远程仓库:可以通过
git clone <url>
的方法。也可以使用git remote add <shortName> <url>
的方法添加远程关联的仓库。之后可以用缩写代指这个仓库。 - 只从远程仓库拉取数据:
git fetch <remote>
。这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用。必须注意git fetch
命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 - 拉去分支并工作区合并:
git pull
自动抓取并合并到当前分支工作区。会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支 - 推送到远端仓库:
git push <remote> <branch>
将当前分支commit的内容推送到远端<remote>
仓库的<branch>
分支上。 - 修改远端仓库:
git remote rename <originName> <newName>
可以修改远端仓库的名字。这同样也会修改你所有远程跟踪的分支名字,原先的<originName>/master
会变成<newName>/master
。 - 删除远端仓库:
git remote rm <remote>
删除远端仓库。
git的分支
本小节中,<remote>
一般代指origin
远端仓库名参数,<branchName>
代指master
分支名参数。
- 查看所有分支:
git branch -vv
查看所有的分支的信息。这个命令最好首先是由git fetch --all
拉取最新的远端信息。 - 查看没有被合并的分支:添加
--merge
参数可以看哪些分支已经合并到当前分支,在这个列表中分支名字前没有 * 号的分支通常可以使用git branch -d <branchName>
删除掉 - 创建分支:
git branch <branchName>
只是创建一个新的分支,但是不会切换。 - 分支切换:
git checkout <branchName>
将HEAD指针切换到相应的分支上。为了创建和切换一次合成,git checkout -b <branchName>
。需要注意的是,切换分支回改变工作区的内容,如果工作区不是干净的回禁止切换。 - 删除分支:
git branch -d <branchName>
删除某个分支。一般是已经完成了追踪。 - 合并分支:首先需要先切换到“母分支”上,然后执行
git merge <branchName>
可以将这个分支的内容合并到母分支上。如果在合并的时候发生了冲突,就需要手动合并在完全完成以后重新执行git add .; git commit -m ""
- 更新远端分支的信息:
git fetch <remote>
获取远程仓库的更新情况。 - 推送分支:
git push <remote> <branch>
推送到远端仓库的 分支上。 - 在远端分支的基础上建立自己的本地开发环境:
git checkout -b <branchName> <remote>/<branchName>
。这样本地分支会自动追踪远端的分支,只需要git pull
就可以进行更新。 - 修改本地分支所追踪的远端分支:
git branch -u <remote>/<branchName>
。在设置好上游分支以后,还可以使用
@{u}
来引用所跟踪的上游分支。比如git merge @{u}
来替代git merge origin/master
。 - 删除远端分支:如果已经合并到了远端的master分支,可以使用
git push <remote> --delete <branchName>
关于git的变基操作
主要涉及git rebase
指令,变基的方法其实是可以掩盖了你实际的开发流程的。这个方法所需要达成的目的其实于meger
指令类似,但是是通过牺牲了修改历史记录从而得到了更简洁的提交信息的。
对于这两种方法,只对尚未推送或分享给别人的本地修改 执行rebase
操作清理历史;对已推送至别处的提交 执行meger
操作,这样,你才能享受到两种方式带来的便利。
因此我们这里暂时不介绍rebase的相关内容,可以参考3.6 Git 分支 - 变基。有更详细的介绍。