git init
git init
用于在当前目录中创建一个新的本地仓库。
在GitHub Desktop中依次选择菜单 File\New repository
,也可以使用快捷键 Ctrl+N
。如下图:
点击 New repository
后,会弹出如下图所示的窗口。
Description
栏中的描述;.gitignore
文件,在之后的上传中,会按照 .gitignore
中的配置忽略相应的文件;license
。关于如何选择合适的 license
,可以参照这篇文章。点击 Create repository
。如果看到了 Publish repository
按钮亮起,如下图所示,说明本地仓库创建成功。
如果要将刚创建的本地仓库提交到远程,点击 Publish repository
即可。
下面的
bash
代码中,$
之后的是命令部分,$
本身不是命令中的内容;没有特殊符号开头的行是上一条命令的执行结果;#
开头的行是注释。下同。
在目录中执行 git init
命令,就可以在当前目录中创建一个 Git 仓库。比如在用户名为 YourName
的用户主文件夹下创建一个名为 TestRepo
的目录,需要执行如下命令:
xxxxxxxxxx
51# git init example
2$ mkdir TestRepo
3$ cd TestRepo
4$ git init
5Initialized empty Git repository in /home/YourName/TestRepo/.git/
现在使用 ls -a
命令查看当前文件夹,会发现生成了 .git
子目录,如下:
xxxxxxxxxx
21$ ls -a
2. .. .git
说明本地 Git 仓库创建成功。如果要将刚创建的本地仓库提交到远程,需要执行 git remote add origin [url]
命令([url]
是远程项目地址),并执行后续的提交和推送操作。
git clone
git clone
拷贝一个 Git 仓库到本地。拷贝后可以在本地查看或修改该项目。
在 GitHub Desktop 中依次选择菜单 File\Clone repository
,也可以使用快捷键 Ctrl+Shift+O
。如下图:
点击Clone repository
后,会弹出如下图所示的窗口。
在 GitHub.com
一栏中,可以找到自己账户中的库并克隆到本地。如果是给定 url 的库,需要按上图所示,将仓库的 url 拷贝到文本框 1,在文本框 2 中选择仓库在本地的目录。完成后点击 Clone
按钮即可。
执行命令
xxxxxxxxxx
11$ git clone [url]
其中 [url] 是你想要复制到本地的项目地址。例如用户名为 YourName
的用户名为 TestRepo
的仓库 https://github.com/YourName/TestRepo.git
。执行如下命令:
xxxxxxxxxx
81# git clone example
2$ git clone https://github.com/YourName/TestRepo.git
3Cloning into 'TestRepo'...
4remote: Enumerating objects: 7, done.
5remote: Counting objects: 100% (7/7), done.
6remote: Compressing objects: 100% (5/5), done.
7remote: Total 7 (delta 2), reused 5 (delta 0), pack-reused 0
8Unpacking objects: 100% (7/7), done.
克隆完成后会在当前目录下生成一个 TestRepo
目录。git clone
命令默认在当前目录下创建一个与项目同名的目录存放克隆的仓库文件,如果想指定创建的目录名,在git clone
命令后面添加你想要的名称即可。例如:
xxxxxxxxxx
11$ git clone https://github.com/YourName/TestRepo.git TestRepoRename
上述命令将 TestRepo
仓库克隆到当前目录下名为 TestRepoRename
的目录中。
git commit
git commit
命令将暂存区里的内容提交到本地仓库中。每次使用 git commit
命令时会生成一个唯一的 commit-id
,在任何时候可以通过这个 id 回退到对应 commit 之前的仓库内容。
在 Git 仓库中修改或添加文件后,左侧的 Changes
一栏会显示对应的修改。例如在 TestRepo
仓库中添加文件 file1.txt
,添加后如下图所示:
在文本框 1(Summary)中添加简要描述,在文本框 2(Description)中添加详细描述。每次提交必须要有 Summary,Description 可写可不写。之后点击 Commit
按钮,完成提交。
Git 会为每一次的提交记录用户名和邮箱地址。所以在第一次提交前需要配置用户名和账户地址。
xxxxxxxxxx
21$ git config --global user.name "YourName"
2$ git config --global user.email your@email.com
在 Git Bash 中执行 git commit
前,需要先执行 git add
命令将修改的文件添加到暂存区。git add
命令的使用方式如下:
xxxxxxxxxx
11$ git add filename1 filename2 ...
如果要添加所有改动的文件,可以使用git add .
命令。
在执行完 git add
后,使用 git commit
指令提交对文件的所有改动。每次提交必须要有 -m
选项和提交注释(相当于 GitHub Desktop 的 Summary 文本框)。例如在 TestRepo
仓库中添加文件 file2.txt
,执行如下命令:
xxxxxxxxxx
61# git commit example
2$ git add .
3$ git commit -m "Add a new file."
4[master c5e1c51] Add a new file.
5 1 file changed, 1 insertion(+)
6 create mode 100644 file2.txt
可以使用 git commit -a
选项跳过 git add
这一步。对应上面的例子:
xxxxxxxxxx
41# git commit example without `git add .`
2$ git commit -am "Add a new file."
3[master 89c1b4b] Add a new file.
4 1 file changed, 1 insertion(+)
git branch
Git 的分支允许开发者从开发主线上分离,在不影响主线内容的同时继续进行代码管理。git branch
命令用于列出分支、创建分支和删除分支。
在 Current branch
栏中点击 New branch
,输入新 branch 名称即可创建。如下图:
创建新分支后,在 Current branch
栏中可以看到新创建的分支。如果要删除当前分支,在最上方菜单栏中选择 Branch\Delete
,或使用快捷键 Ctrl+Shift+D
,如下图:
点击后会弹出确认框,点击确定后即可删除当前所在分支。
git branch
命令会列出在本地的分支。比如对 TestRepo
仓库,有:
xxxxxxxxxx
41# git branch example
2$ git branch
3 TestBranch1
4* master
*
号标记的表示当前所在的分支。
如果要创建一个新的分支,例如 TestBranch2
,在 git branch
命令后添加新分支名即可。例如:
xxxxxxxxxx
61# git branch example
2$ git branch TestBranch2
3$ git branch
4 TestBranch1
5 TestBranch2
6* master
可以看到新分支已经创建。
如果要删除分支,使用 -d
命令。例如删除 TestBranch2
分支:
xxxxxxxxxx
61# git branch example
2$ git branch -d TestBranch2
3Deleted branch TestBranch2 (was 89c1b4b).
4$ git branch
5 TestBranch1
6* master
可以看到刚刚创建的分支 TestBranch2
已被删除。
git push
之前的 4 个命令都是操作本地版本库。在本地版本库修改完成后,使用 git push
命令将本地分支推送到远程服务器上对应的分支。
执行 commit
命令提交后,点击 Push origin
即可,提交的内容会同步到 Current branch
中选择的分支里。
git push
命令的一般形式为 git push <远程主机名> <本地分支名>:<远程分支名>
,其中 <>
内的内容均可以省略:
git push origin master
;git push origin --delete BranchName
。例如:git push origin :TestBranch1
;origin
主机对应的分支。例如:git push origin
;git push
即可。例如,将修改后的 file1.txt
推送到 TestRepo
仓库的 TestBranch1
分支,需要执行的命令为:
xxxxxxxxxx
151# git push example
2$ git add .
3$ git commit -m "Add new line in file1.txt"
4[master 239d838] Add new line in file1.txt
5 1 file changed, 2 insertions(+), 1 deletion(-)
6$ git push origin master:TestBranch1
7Enumerating objects: 5, done.
8Counting objects: 100% (5/5), done.
9Delta compression using up to 6 threads
10Compressing objects: 100% (2/2), done.
11Writing objects: 100% (3/3), 322 bytes | 322.00 KiB/s, done.
12Total 3 (delta 1), reused 0 (delta 0)
13remote: Resolving deltas: 100% (1/1), completed with 1 local object.
14To https://github.com/YourName/TestRepo.git
15 89c1b4b..239d838 master -> TestBranch1
git pull
git pull
命令用于将远程分支拉取到指定本地分支。
远程仓库修改后,红框对应的位置会出现 Pull origin
,点击该按钮即可将远程仓库的内容同步到 Current branch
中选择的分支里。
git pull
命令的一般形式为 git pull <远程主机名> <远程分支名>:<本地分支名>
,其中 <>
中的内容可以省略:
git pull origin master
;git pull origin
;git pull
例如,我们在远程修改了 README.md
,现在想将该修改合并到本地库,需要执行的命令为:
xxxxxxxxxx
81# git pull example
2$ git pull origin master:matser
3From https://github.com/YourName/TestRepo
4 89c1b4b..130c342 master -> master
5warning: fetch updated the current branch head.
6fast-forwarding your working tree from
7commit 89c1b4bc76530e11ba12205f208d38c204c1956f.
8Already up to date.
git pull
命令会将远程获取的最新版本合并到本地仓库。如果不想自动合并,可以使用git fetch
指令。
git checkout
git checkout
用于切换分支。
在 Current branch
栏中直接选择分支即可。如下图:
切换分支指令的形式为 git checkout branchname
。例如切换到 TestRepo
仓库的 TestBranch1
分支:
xxxxxxxxxx
101# git checkout example
2$ git branch
3 TestBranch1
4* master
5$ git checkout TestBranch1
6Switched to branch 'TestBranch1'
7Your branch is up to date with 'origin/TestBranch1'.
8$ git branch
9* TestBranch1
10 master
执行完 git checkout
后分支成功切换到 TestBranch1
。
git merge
git merge
命令用于将多个分支合并为一个分支。
注意:如果分支出现冲突,比如在两个分支内对同一个文件进行了不同修改,需要先处理冲突后再进行合并。解决冲突的方法可以参考这篇文章。
假设即将合并的分支中所有的冲突都已经解决。在 Current branch
栏底部点击 Choose a branch to merge into ...
(...
处是当前分支名),会弹出下图所示的窗口:
以合并分支 TestBranch1
到分支 master
为例,在列表中选中 TestBranch1
,之后点击 Merge TestBranch1 into Master
即可。
git merge
命令将指定的分支合并到当前分支。以合并分支 TestBranch1
到分支 master
为例:
xxxxxxxxxx
111# git merge example
2$ git checkout master
3Switched to branch 'master'
4Your branch is up to date with 'origin/master'.
5$ git merge TestBranch1
6hint: Waiting for your editor to close the file...
7[main 2020-06-25T16:30:19.107Z] update#setState idle
8Merge made by the 'recursive' strategy.
9 file2.txt | 1 +
10 1 file changed, 1 insertion(+)
11 create mode 100644 file2.txt
使用 -h
选项可以查看 git merge
命令的帮助。
该常见命令清单参考了这篇文章。
xxxxxxxxxx
81# 在当前目录下新建一个Git仓库
2$ git init
3
4# 新建一个目录并初始化为Git仓库
5$ git init [project-name]
6
7# 从指定url克隆一个Git仓库
8$ git clone [given-url]
xxxxxxxxxx
101# 设置当前仓库提交代码时的用户信息
2$ git config user.name "YourName"
3$ git config user.email your@email.com
4
5# 设置全局的提交时用户信息
6$ git config --global user.name "YourName"
7$ git config --global user.email your@email.com
8
9# 显示当前的Git配置
10$ git config --list
xxxxxxxxxx
141# 添加指定文件到暂存区
2$ git add [file1] [file2] ...
3
4# 添加当前目录所有文件到暂存区
5$ git add .
6
7# 添加指定目录(包括子目录)到暂存区
8$ git add [dir]
9
10# 删除工作区指定文件,并且将这次删除放入暂存区
11$ git rm [file1] [file2] ...
12
13# 改名指定文件,并且将这次改名放入暂存区
14$ git mv [old-name] [new-name]
xxxxxxxxxx
131# 将暂存区提交到仓库
2$ git commit -m "Summary"
3
4# 将指定文件由暂存区提交到仓库
5$ git commit [file1] [file2] ... -m "Summary"
6
7# 将上次提交后工作区的变化提交到仓库
8$ git commit -a
9
10# 使用一次新的提交替代上一次提交
11# 指定文件的新变化将被重做
12# 如果没有任何文件变化,则只改写上一次提交的提交信息
13$ git commit --amend [file1] [file2] ... -m "New Summary"
xxxxxxxxxx
311# 列出所有本地分支
2$ git branch
3
4# 列出所有远程分支
5$ git branch -r
6
7# 列出所有本地分支和远程分支
8$ git branch -a
9
10# 新建一个分支,但停留在当前分支
11$ git branch [branch]
12
13# 新建一个分支,并切换到该分支
14$ git checkout -b [branch]
15
16# 新建一个分支,并与指定远程分支建立追踪关系
17$ git branch --track [branch] [remote-branch]
18
19# 切换到指定分支,并更新工作区
20$ git checkout [branch]
21
22# 合并指定分支到当前分支
23$ git merge [branch]
24
25# 删除分支
26$ git branch -d [branch]
27
28# 删除远程分支
29$ git push origin --delete [branch-name]
30$ git push origin :[branch-name]
31$ git branch -dr [remote-branch]
xxxxxxxxxx
171# 显示所有远程仓库
2$ git remote -v
3
4# 显示指定远程仓库
5$ git remote show [remote]
6
7# 上传本地指定分支到远程仓库
8$ git pull [remote] [branch]
9
10# 无视冲突,强行上传当前本地分支到远程仓库
11$ git push [remote] --force
12
13# 下载远程仓库的所有变动
14$ git fetch [remote]
15
16# 下载远程仓库的变动,并与本地分支合并
17$ git pull [remote] [branch]
xxxxxxxxxx
171# 显示有变更的文件
2$ git status
3
4# 显示当前分支的版本历史
5$ git log
6
7# 显示提交历史,以及每次提交变更的文件
8$ git log --stat
9
10# 显示暂存区与工作区的差异
11$ git diff
12
13# 显示暂存区和上一次提交的差异
14$ git diff --cached [file]
15
16# 显示两次提交之间的差异
17$ git diff [first-branch]...[second-branch]
xxxxxxxxxx
171# 恢复暂存区的指定文件到工作区
2$ git checkout [file]
3
4# 恢复某个提交的指定文件到暂存区和工作区
5$ git checkout [commit] [file]
6
7# 恢复暂存区的所有文件到工作区
8$ git checkout .
9
10# 重置暂存区指定文件,与上一次提交保持一致,但工作区不变
11$ git reset [file]
12
13# 重置暂存区与工作区,与上一次提交保持一致
14$ git reset --hard
15
16# 新建一个提交,用来撤销指定的提交。被指定提交的所有变化将被新建的提交抵消,并且应用到当前分支
17$ git revert [commit]
xxxxxxxxxx
21# 生成一个可供发布的压缩包
2$ git archive