众所周知,Git是一个开源的分布式版本控制系统,用于跟踪和管理源代码的变更。而Git有着大量的常用命令。
**这些命令是为了帮助开发者更有效率地进行版本控制,包括创建和切换分支,提交更改,合并分支等等**。
通过这些命令,开发者可以轻松地管理代码的不同版本,跟踪和回滚更改,以及协作其他开发者。
下面,我总结了Git的常用命令,一文教你如何快速控制Git。
## **常用操作**
`git push origin test`
推送本地的`test`分支到远程仓库`origin`上。如果远程仓库没有`test`分支,分支将会被自动创建。
`git rm -r --cached 文件/文件夹名字`
用于从Git的版本控制中移除文件或者文件夹,但是它们仍然会保留在你的本地文件系统中。
`git reflog`
会显示所有的移动HEAD的操作记录,包括commit,reset,checkout等操作,可以用来找回丢失的commit。
`git log --graph`
会以图形化的方式显示提交历史记录,对查看分支和合并的历史非常有帮助。
`git merge --no-ff -m '合并描述' 分支名`
会把指定的分支合并到当前分支。`--no-ff`选项表示即使可以进行快进(fast-forward)合并也要创建一个新的commit,这样可以在历史记录中看到这次合并操作。
`git check-ignore -v 文件名`
会检查指定的文件是否被`.gitignore文件`所忽略,并且显示是哪一条忽略规则导致的。
`git add -f 文件名`
会强制将文件添加到Git的版本控制中,即使这个文件被`.gitignore文件`所忽略。
`git add -u`
会将所有已经被Git跟踪并且被修改(但还没有被staged)的文件添加到暂存区中。它不会添加新的文件(未被Git跟踪的文件)。
## **git 创建项目仓库**
`git init`
用于在当前目录下**初始化**一个新的Git仓库。当你执行此命令后,Git将在当前目录下创建一个名为`.git`的隐藏目录,这个目录包含了仓库的所有元数据,例如:提交历史、分支和标签等。
`git remote add origin url`
用来将本地的Git仓库与远程的Git仓库进行关联。其中,`origin`是远程仓库的名字,这个名字是可以自定义的,但大部分人习惯性地使用`origin`作为远程仓库的名字。`url`则是远程仓库的地址。
`git pull`
用于将远程仓库的更改拉取到本地。具体来说,它是先执行`git fetch`来获取远程仓库的最新状态,然后执行`git merge`将这些更改合并到当前分支。
`git fetch`
从远程仓库获取所有的分支和标签,但是它并不会自动合并或修改当前的工作。这意味着,你可以在任何时候执行`git fetch`,而不必担心当前的工作被影响到。
## **分支操作**
`git branch`
可以创建一个新的分支。例如,`git branch new_branch`将创建一个名为`new_branch`的新分支。
`git checkout`
用于切换到另一个分支。例如,`git checkout new_branch`将切换到名为`new_branch`的分支。
`git checkout -b`
用于创建并切换到一个新的分支。
`git branch`
用无参数执行,会列出所有的本地分支。当前的分支名前会有一个`*`标记。
`git branch -v`
会列出所有的分支,以及每个分支最后一次提交的信息。
`git branch -vv`
会列出所有的分支,它们与上游分支的关系,以及每个分支最后一次提交的信息。
`git checkout -b 分支名 origin/分支名`
用于从远程仓库创建一个新的分支到本地,并切换到新的分支。
`git branch --merged`
会列出所有已经被合并到当前分支的分支。
`git branch --no-merged`
会列出所有还没有被合并到当前分支的分支。
`git branch -d 分支名`
会删除指定的分支,前提是这个分支已经被合并过。否则Git会给出一个警告。
`git branch -D 分支名`
会强制删除指定的分支,不管这个分支是否已经被合并。
`git push origin :分支名`
用于删除远程仓库的分支。
`git merge 分支名`
会将指定的分支合并到当前分支。如果可能,Git会进行"fast-forward"合并,只更新指向最新提交的指针。如果不可能,Git会创建一个新的提交,这个提交有两个父提交。
## **暂存操作**
`git stash`
**超级重要的命令**!它允许你将当前的工作目录的修改保存起来,以便在未来的某个时候再应用。这对于在进行一些复杂的任务,如切换分支或拉取新的更新时,需要暂时保存当前的工作状态非常有用。
`git stash apply`
**用于将最近一次保存的暂存修改应用到工作目录**。这不会从暂存列表中移除该暂存,所以可以多次应用它。
`git stash pop`
和`git stash apply`类似,但在应用暂存修改后,它会从暂存列表中删除这个暂存。这样做的好处是,**不需要再去手动清理暂存列表**。
`git stash list`
用于查看当前的所有暂存。每个暂存都有一个唯一的名称,如`stash@{0}`,`stash@{1}`等。
`git stash drop`
用于删除一个特定的暂存。需要指定要删除的暂存的名称,如`stash@{0}`。
`git stash clear`
用于清除所有的暂存。这是一个危险的操作,因为一旦执行,所有的暂存都将被永久删除,无法恢复。
## **回退操作**
`git reset --hard HEAD^`
用于将代码库回退到上一个版本。其中,HEAD^表示当前版本的上一个版本,如果你想回退到上上个版本,可以使用HEAD^^,以此类推。--hard参数表示强制回退,会删除所有未提交的本地修改。
`git reset --hard commit_id`
用于将代码库回退到指定的版本。其中,commit_id是你想回退到的版本的唯一标识符,可以去在git日志中找。
`git checkout -- file`
用于撤销指定文件的修改。file是你想撤销修改的文件的路径。如果这个文件已经被添加到暂存区,那么会将文件回退到暂存区的状态;如果这个文件已经被提交到版本库,那么会将文件回退到最后一次提交的状态。
`git reset HEAD file`
用于撤销暂存区的文件修改,将其回退到工作区。file是你想撤销修改的文件的路径。会将文件从暂存区中移除,但是不会删除文件的修改,这些修改会保留在工作区。
## **标签操作**
`git tag 标签名`
用来在当前提交的版本上创建一个新的标签。标签是一个引用,可以用来标记项目中的重要点,例如发布的版本。
`git tag 标签名 commit_id`
用来在指定的提交记录上创建一个新的标签。
`git tag`
会列出项目中的所有标签。
`git tag -a 标签名 -m '描述'`
创建一个带有描述信息的新标签。`-a`参数表示创建一个带有注解的标签,`-m`参数则用来提供注解信息。
`git tag -d 标签名`
会删除本地的指定标签。
`git show 标签名`
会显示指定标签的详细信息,包括创建标签的提交记录和注解信息。
`git show --stat <commit>`
会列出指定提交中所有修改的文件,以及每个文件的行数变化。
`git show --name-only <commit>`
会列出指定提交中所有修改的文件名。
`git show <commit> filename`
会显示指定提交中指定文件的变化。
`git push origin 标签名`
会将本地的指定标签推送到远程仓库。
`git push origin --tags`
会将本地的所有标签推送到远程仓库。
`git push origin :refs/tags/标签名`
会从远程仓库中删除指定的标签。在`:`之前的部分是本地引用,之后的部分是远程引用,如果之前的部分为空,那么就表示删除远程的引用。
## **其他操作**
### **查看提交记录**
`git log`
显示所有的提交历史记录。每个提交都会显示作者、日期和提交消息。
`git log branchname`
显示指定分支的所有提交历史记录。
`git log -n`
显示最近n次的提交。n是你想查看的提交数量。
`git log filename`
显示指定文件的所有提交历史记录。
`git log --pretty=oneline filename or directory`
以一行的形式显示指定文件或目录的所有提交历史记录。
`git log --graph 分支名(多个分支名以空格隔开)`
以图形形式显示一个或多个分支的所有提交历史记录。
`git log --graph --all`
以图形形式显示所有分支的所有提交历史记录。
`git log --author=<author name>`
显示指定作者的所有提交历史记录。
### **忽略已加入到版本库中的文件**
`git update-index --assume-unchanged file`
让Git忽略单个已经被跟踪的文件的改动。
`git rm -r --cached 文件/文件夹名字 (. 忽略全部文件)`
从Git的跟踪列表中移除文件或文件夹,但不会删除物理文件。
### **取消忽略文件**
`git update-index --no-assume-unchanged file`
取消对指定文件的忽略,Git将再次跟踪此文件的改动。
### **拉取、上传免密码**
`git config --global credential.helper store`
让Git记住你的用户名和密码。当你在执行需要验证的操作(如push和pull)时,Git会自动为你填写用户名和密码,无需手动输入。但也会将你的凭据存储在磁盘上,所以使用时注意安全问题。
## **关于Masutaa**
Masutaa是个互联网从业者自由协作交流平台,链接行业内TOP10%人才!目前平台上已经有将近400名互联网尖端人才,其中近70%的从业者从业年限超3年。加入Masutaa,加入自由生活!
有疑问加站长微信联系(非本文作者))