众所周知,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
会列出指定提交中所有修改的文件,以及每个文件的行数变化。
git show --name-only
会列出指定提交中所有修改的文件名。
git show
会显示指定提交中指定文件的变化。
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=
显示指定作者的所有提交历史记录。
忽略已加入到版本库中的文件
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,加入自由生活!