工作区 -> 暂存区

1
2
3
4
git add <文件名>
git add <目录名>/
git add -A #将当前工作目录中的所有变更(包括新增、修改和删除的文件)添加到暂存区
git add -u #只会将已经跟踪的文件(即之前已经被添加到仓库的文件)的修改添加到暂存区,不会添加新文件

从暂存区移除或到工作区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
git reset <file> #如果file是被删除的文件变更,只会撤销变更,不会恢复工作区
git reset #移除所有变更
git checkout -- <deleted-file> #这会从当前分支的最新提交(HEAD)中恢复文件到工作目录
git reset --hard #撤销暂存区中的所有变更,并且同时将工作目录中的文件恢复到当前分支的最新提交状态

git checkout -- <file>
#-- 表示从暂存区恢复文件到工作区。
#<file> 是你希望恢复的文件路径。

git restore <file> #git restore 会从暂存区恢复文件到工作区

git stash
#当前工作区的所有未提交的修改(包括暂存区和工作区的修改)
#保存到一个临时的“stash”中,以便你可以切换到一个干净的工作区状态。
git stash pop
#git stash pop 命令的作用是将最近一次保存的 stash 中的修改重新应用到当前工作区,
#并从 stash 列表中移除该 stash。

提交

1
2
3
4
git commit -m "提交信息"
git commit -a -m "提交信息"
#跳过添加到暂存区,直接将工作目录中的所有变更
#(包括新增、修改和删除的文件)提交到仓库

远程仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
git remote add <本地对应名称> <远程仓库url> 
git remote -v #查看远程仓库信息
git remote set-url <本地对应名称> <远程仓库url>

git branch -r #展示远程分支
git branch -vv #展示本地分支和远程分支的对应

git pull <本地对应名称> <远程分支> #拉取远程仓库的变更并合并

git fetch <本地对应名称>
#从远程仓库抓取最新的变更,但它不会自动合并这些变更到当前分支。
#git fetch 只是将远程分支的最新状态下载到本地仓库的远程分支引用中。
#只会展示在git branch -r中


git push <本地对应名称> <本地分支>

git switch -c <local-branch-name> <remote-name>/<remote-branch-name>
#创建一个本地分支,并将其上游设置为指定的远程分支

git branch --set-upstream-to=<remote-name>/<remote-branch-name> <local-branch-name>
#手动设置

git push -u origin <branch-name>
#将本地分支 <branch-name> 的更改推送到远程仓库 origin 的同名分支
#(如果远程分支不存在,Git 会自动创建它)并设置对应关系

git checkout -b <local-branch-name> origin/<remote-branch-name>
#从远程分支拉去并创建本地分支


分支操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
git checkout --orphan new-empty-branch #创建空分支
git checkout -b <branch-name> #从当前分支创建分支并切换到分支
git branch <branch-name> #从当前分支创建分支
git checkout <branch-name> #切换分支
git branch #查看本地分支
git branch -a #查看所有分支
git checkout <branch-name> #切换分支
git merge <source-branch> #将source-branch合并到当前分支
git branch -d <branch-name> #branch-name被合并到别的分支后删除该分支
git branch -D <branch-name> #强制删除分支
git push <remote-name> --delete <branch-name> #删除远程分支
git push <remote-name> --delete --force <branch-name> #强制删除远程分支

git branch -m <new-branch-name>
git branch -m <old-branch-name> <new-branch-name>
#重命名分支

git log
git log <branch-name> #查看历史记录

git diff <branch-name>
git diff <branch1>..<branch2> #查看不同

git rebase <target-branch>
#当前分支的更改将被重新应用到这个分支的顶部
# branch1:a b c
# branch2:d e f
#git checkout branch1
#git rebase branch2
#branch2 d e f a b c

冲突处理

所谓冲突 指成为新的提交时有同一个文件的不同修改

本地分支merge

输出提示

1
2
3
Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.

此外,可以通过以下命令查看哪些文件存在冲突:

1
git status

手动解决冲突,打开冲突文件

1
2
3
4
5
<<<<<<< HEAD
这是主分支的修改
=======
这是合并分支的修改
>>>>>>> feature

解决冲突后,使用以下分支完成合并

1
git commit

解决冲突的过程中遇到问题,或者决定放弃合并,可以运行以下命令:

1
git merge --abort

push远程分支

1.git fetch远程分支到本地
2.合并远程分支到本地分支
3.解决冲突
4.生成新的提交
5.推送

reset

–soft

行为:

将当前分支的提交历史回退到指定的提交,但保留之后的提交所做的更改在暂存区中。

结果:

提交历史被回退。
暂存区包含被回退的提交的更改。
工作区保持不变。

–mixed(默认模式)

行为:

将当前分支的提交历史回退到指定的提交,保留之后的提交所做的更改在工作区中,但取消暂存。

结果:

提交历史被回退。
工作区包含被回退的提交的更改。
暂存区被清空。

–hard

行为:

将当前分支的提交历史、暂存区和工作区都回退到指定的提交的状态。

结果:

提交历史被回退。
暂存区被清空。
工作区被回退到指定提交的状态,所有之后的更改都会被丢弃。

something

将工作区设置为历史某一次提交

方法 1:使用 git checkout
使用 git checkout 可以将工作区设置为历史上的某一次提交的状态。这种方法不会修改当前分支的提交历史,只是将工作区的内容更新为指定提交的状态(使用之前最好提交了修改)

方法 2:使用 git reset
如果你希望将当前分支的提交历史和工作区都回退到历史上的某一次提交的状态,可以使用 git reset 命令。这种方法会修改当前分支的提交历史


本站由 yyb 使用 Stellar 1.29.1 主题创建。 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。