文章目录
本文记录了 git 中常用、但不容易记住的命令,它们分别是向新仓库推送代码的命令,以及撤回 git add
, git commit
和 git push
的命令。
1 git 推送代码
如何通过 git 推送代码到新建仓库?
在 Github 创建好仓库后,我们需要复制这个仓库的 URL,然后运行如下命令:
git init
git add .
git commit -m "commit message"
# 添加远程仓库,并命名为 origin
git remote add origin <repo-url>
# 向远程仓库 origin 推送分支 master,并将其设置为上游分支
git push --set-upstream origin master
其中,难点在于 git remote
和 git push
这两个命令。
1.1 git remote 命令
在 git remote add origin <repo-url>
这个命令中,我们将位于 <repo-url>
位置的仓库,设置成为了我们的远程仓库,并且将这个远程仓库在本地命名为了 origin。注意:该仓库的实际名称没有发生改变,改变的只是本地名称。
在设置好仓库名称后,如果想要查看远程仓库的名称,可以使用 git remote
命令:
# 查看远程仓库的名称
git remote
1.2 git push 命令
git push --set-upstream origin master
这个命令可以这么理解:git push
表示想要推送代码,origin
表示想要推送到的上游仓库,master
表示想要推送的分支(可以理解为:将本地的 master
分支代码推送到 origin
上的 master
分支,如果 origin
上不存在 master
分支,则新建这个分支),--set-upstream
表示跟踪该分支,以后使用 git push
时,将默认推送该分支。
这个命令的 --set-upstream
可以简化为 -u
:
# 完整的推送命令
git push --set-upstream origin master
# 简洁的推送命令
git push -u origin master
2 git 撤回修改
如果我们不小心使用 git 执行了 git add
,git commit
和 git push
命令,我们要如何撤回修改?
2.1 撤回 git add
git add
的作用是将文件添加到暂存区,因此撤回 git add
的操作就是将文件从暂存区中移除。
# 从暂存区中撤回特定文件
git restore --staged <file-name>
# 从暂存区中撤回所有文件
git restore --staged .
通过撤回 git add
操作,能够帮助我们重新选择要将哪些文件添加到暂存区,从而帮助我们选择更加合适的文件提交 commit。
2.2 撤回 git commit
撤回 git commit
的操作有两种,分别是软重置和硬重置。它们的命令如下:
# 软重置
git reset --soft HEAD~1
# 硬重置
git reset --hard HEAD~1
其中,软重置使用的是 --soft
选项,它仅仅撤回了提交的信息,但保留了文件在暂存区的状态,因此也保留了文件的更改。
第二种则使用 --hard
选项,它会将整个项目回退到过去的某一个状态,并删除在这之后所有的改动。
我认为使用软重置是更好的选择,因为硬重置会连代码修改一并删除,一旦执行不可撤回。
2.3 撤回 git push
撤回 git push
的命令也有两种,分别为强制撤回和反转撤回:
# 强制撤回
git reset --hard HEAD~1
git push origin master --force
# 反转撤回
git revert HEAD
git push origin master
其中,强制撤回是让项目强制回到上一个提交状态,舍弃在这之后的一切改动。而反转撤回是再进行一次 commit,这个 commit 会将当前 commit 所做的修改相反地执行一次,从而让代码恢复到上一个状态。
举个例子:假设,项目的分支如下:
A -> B -> C (HEAD)
我们想要撤回最新的提交(C)到状态 B。
如果选择强制撤回的方式,项目的分支会变成:
A -> B(HEAD)
这样 C 状态下所做的一切修改都会被丢弃。
如果选择反转撤回的方式,项目的分支会变成:
A -> B -> C -> D (HEAD)
此时,项目的 D 状态与 B 状态完全相同,实现了撤回的目的,同时也保留了在 C 中所做的修改记录,方便查阅所需的信息。