在 Git 中,包括工作区(Working Directory)、暂存区(Staging Area 或 Index)、提交区(Repository)三个概念,它们分别代表不同的文件状态和存储位置。
工作区(Working Directory)
|
| git add
v
暂存区(Staging Area)
|
| git commit
v
提交区(Repository)
1.创建-init,config
git init // 将文件夹初始化为仓库
设置 Git 用户名和邮箱,为了不影响全局的配置,我设置的是仓库级别的。
git config --global user.name xxx
git config --global user.email xxx@xxx.com
2.推送代码-add,commit
使用`add`指令将文件添加到 staging area
使用`commit``指令进行提交,-m参数进行提交信息的描述
git add . // 这里可以把'.'替换成任何你想添加的文件
git commit -m "add file"
2.1提交参数(amend)
某个文件在上次提交中遗漏了,在那次提交中补上这个文件。
git add forgotten_file
git commit --amend
3.克隆
克隆可以选择克隆一整个仓库,或者某个文件夹
git clone https"//github.com/xxx
git clone https"//github.com/xxx clone_file // 指定下载clone_file
4.删除
有一个文件从硬盘中删除了,但是并未从 git 仓库中删除,找到它并从 git 仓库中删除。删除也是修改的一种,提交这个修改就好了
git add delete_file
git commit -m "remove delete_file"
一个新文件从 staging area
中删除。按照要求,不应该直接从硬盘上删除这个文件,只是从 Git 中删除而已。加上 --cache
可以是文件只是从 staging area
中移除,不会真正的删除物理文件,如果要连这个物理文件也一起删除,请使用 -f
选项
git rm --cached delete.rb
5.移动-mv
移动所有 .html
文件到 src
文件夹。git mv
后面的第二个参数可以接受文件或目录,如果是目录,则文件会直接放入目录内,可以使用正则(glob模式)匹配所有 .html 文件
git mv *.html src
git mv指令也可以用来给文件重命名
git mv old.txt new.txt
6.历史提交记录-log
git log 指令查看历史提交记录
7.回退-reset,checkout
两个文件都被添加到了 staging area
, 但是只想提交其中一个。使用 git reset
可以用仓库中的版本覆盖 staging area
的版本。
git reset
使用仓库中的版本覆盖staging area
中的,如果working directory
该文件没有其他修改,则staging area
中的修改将应用到working directory
中。反之working directory
中的版本将被保留,丢弃staging area
中的修改。git checkout
则是使用staging area
的中的版本覆盖working directory
。
git reset HEAD file.rb
git reset --soft HEAD~1
撤销上一次提交。
--soft
参数将上一次的修改放入staging area
--mixed
参数将上一次的修改放入working directory
--hard
参数直接将上一次的修改抛弃
抛弃某一次的修改,使用上次提交的版本。
git checkout file.rb
// 也可以用reflog命令查找所有操作,找到要撤销的操作id
git checkout command_id
8.远端仓库
查看远端仓库。其实可以不加-v
参数,加这个参数只是可以将地址也一起输出
git remote -v
拉取远端仓库,其中可以指定分支
git pull origin master
// 对应推送格式如下:
git push origin master
添加远端仓库:
git remote add origin https:github.com/xxx/xxx
9.查看文件修改人-blame
查看某个文件的修改人。
git blame file.rb
10.分支-branch
10.1切换分支-checkout
可以先使用 git branch <分支名> 指令创建分支
git checkout -b my_branch
就是创建一个分支,并切换过去,而且这种方法更方便
10.2删除分支
git branch -d <分支名>
10.3推送分支
您对本地分支做了一些修改,并想共享它,但还没准备好与 "主 "分支合并。 只将 "test_branch "推送到远程仓库
git push origin test_branch
11.合并-merge
我们在分支 "feature "中有一个文件;让我们把它合并到主分支。
git merge feature
关于git merge
可以参考:使用分支——Git Merge命令
12.拉取-merge,fetch
看起来有一个新分支被推送到了我们的远程版本库。在不与本地版本库合并的情况下获取更改
其实,git pull
就是 git fetch
和 git merge
组成的。
git fetch origin
关于git fetch
和git pull
的用法可以参见:详解git pull和git fetch的区别:
13.rebase
git rebase
一个分支的所有修改在另一个分支上重新应用一遍,所以在提交记录上看,会发现一个分支的所有提交在另一个分支之前或者之后。然后删除另一个被合并的分支,保持分支简洁。
git rebase master feature
表示将 feature
上的修改在 master
上重新应用一遍
在使用此命令的时候,需要非常注意的是,不要 rebase 哪些已经推送到公共库的更新,因
为此操作是重新应用修改,所以公共库的更新可能已经被其他协作者所同步
关于rebase命令可以查看:git rebase详解(图解+最简单示例,一次就懂)
git rebase --onto <new_base> <old_base> <branch>
你基于<old_base>分支创建了一个错误的分支branch,并且你已经在这个分支做了一些提交,你希望你的分支在<new_base>上创建,可以使用这个命令将错误分支上的提交合并到new_branch上
14.cherry-pick
用于从其他分支选取特定提交并复制到当前分支,适用于修复bug和引入特定功能
执行命令:git cherry-pick <commit_hash>,其中<commit_hash>是你想要复制的提交的哈希值。
如果要复制多个提交,可以连续指定多个提交的哈希值,如:git cherry-pick <commit_hash1> <commit_hash2> ...。
如果在cherry-pick的过程中遇到冲突,Git会停止应用提交,让你解决冲突。解决冲突后,你需要使用git cherry-pick --continue来继续应用剩余的提交,或者使用git cherry-pick --abort来取消操作。
15.Grep
git grep
支持各种条件搜索及正则表达式。
16.重命名提交-rename commit
重命名提交。当涉及提交修改时,应该想到 git rebase -i <hash值>
命令,它接受可以一个参数(提交的哈希值),它将罗列出此提交之后的所有提交,然后可以对个个提交做对应的操作。
17.reflog
git reflog 命令可以列出所有的操作记录
18.revert
与 reset 不同的是,revert 只会撤销当前的 commit,而之后的 commit 操作的修改还会保留,但是reset还会将之后的所有 commit 操作的修改全部退回 staging area 或丢弃。