git 常用命令大全

目录

git clone

git config

git remote

git status

git add

git rm

git mv

git commit

git branch

切换分支工作

git push

git pull

撤销git reset


git clone

下载一个项目和它的整个代码历史:git clone [url]

查看远程仓库信息:git remote -v

1、http/https方式:需要手动输入用户名和密码

2、ssh方式:本地需要生成ssh key私钥和公钥,并在github账号上添加公钥

(1) 查看是否存在ssh key,若~/.ssh存在id_rsa和id_rsa.pub则存在

    cd ~/.ssh

    ls

(2) 若不存在则需要生成,生成ssh key私钥和公钥方法:

    ssh-keyen -t rsa -C "[email protected]"

(3) 然后把公钥id_rsa.pub内容复制到github/settings/ssh and gpg keys里面,再验证是否设置成功:

    ssh -T [email protected]

git config

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)

config 配置有system级别、global(用户级别)和local(当前仓库)三个,设置先从system->global->local ,底层配置会覆盖顶层配置

1.查看系统config:git config --system --list

2.查看当前用户(global)配置:git config --global  --list

3.查看当前仓库配置信息:git config --local  --list

4.查看当前配置信息:git config --list

5.编辑Git配置文件,将打开编辑器:git config -e [--global]

6.设置提交代码时的用户信息:

$ git config [--global] user.name "[name]"

$ git config [--global] user.email "[email address]"

git remote

查看远程仓库:git remote -v

添加远程仓库:git remote add  

重命名远程仓库:git remote rename  

移除远程仓库:git remote remove 

修改远程仓库url:git remote  set-url  

git status

当执行 git status 的时候,返回结果大致可分为3个部分:

1、拟提交的变更:这是已经放入暂存区,准备使用 git commit 命令提交的变更,最后git push的内容将以这个拟提交的变更为主(包括modified, new file, deleted等)

2、未暂存的变更:这是工作目录和暂存区快照之间存在差异的文件列表

3、未跟踪的文件:这类文件对于 Git 系统来说是未知的,也是可以被忽略的

git add

# 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加每个变化前,都会要求确认,对于同一个文件的多处变化,可以实现分次提交
$ git add -p

git rm

将文件从工作区和暂存区中删除:git rm 

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

停止追踪指定文件,但该文件会保留在工作区:git rm --cached [file]

若此时git push到远程仓库了,会deleted tmp3.txt

git mv

若文件已经提交到暂存区了,想改文件名称,可通过git mv来同步更改工作区文件名称和暂存区文件名称

$ git mv [file-original] [file-renamed]

git commit

git commit 命令主要是将暂存区里的改动提交到本地的版本库。

每次使用 git commit 命令我们都会在本地版本库生成一个 40 位的哈希值,这个哈希值也叫 commit-id,通过git log可查看所有commit-id

commit-id 在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset 的组合命令回到这里

git commit -m “message” :提交到版本库,并指定提交信息。

git commit -a -m “message”:-a 参数表示,可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过 git add 添加到暂存区。

git commit --amend  :追加提交,它可以在不增加一个新的 commit-id 的情况下将新修改的代码追加到前一次的 commit-id 中。

git branch

查看分支

列出所有本地分支:git branch

列出所有远程分支:git branch -r

列出所有本地分支和远程分支:git branch -a

查看本地分支对应的上游分支:git branch -vv

查看本地分支和远程分支关联情况:git branch -avv

新建分支

新建一个分支,但依然停留在当前分支:git branch [branch-name]

切换到指定分支,并更新工作区:git checkout [branch-name]

新建一个分支,并切换到该分支:git checkout -b [branch]

重命名分支:git branch -m  

删除本地分支

git branch -d 

git branch --delete 

删除远程分支:

git push origin --delete [branch-name]

git本地分支与远程分支关联(给当前分支设置上游分支):

git branch --set-upstream-to=origin/dev(dev关联分支名称)

git branch -u /

取消上游分支:git branch --unset-upstream 

切换分支工作

场景:你正在自己的分支(branch_v1.2)上做着功能的开发,此时需要协助他人在分支branch_v1.1做修改,步骤如下

(1) 在branch_v1.2分支,保存自己的修改:
git stash -u 【包括未跟踪的文件也会被存储】
git stash --all 【ignored files也会被存储】

(2) 切换到他人分支branch_v1.1:
git checkout -b sucloud_v1.1 origin/branch_v1.1

(3) 接着就可以在branch_v1.1分支上正常修改,提交,推送更新

(4) 完成之后就可以切回到自己的分支branch_v1.2继续之前的工作

git push

git push <远程主机名> <本地分支名>:<远程分支名>

git push <远程主机名> <本地分支名>
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建

git push <远程主机名>
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支

git push
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

git push <远程主机名>  :<远程分支名>
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

git pull

git pull <远程主机名> <远程分支名>:<本地分支名>

git pull = git fetch + git merge

在使用git pull拉取服务器最新版本时,如果出现error: Your local changes to the following files would be overwritten by merge: ... Please, commit your changes or stash them before you can merge.错误时,代表这代码冲突了,本地修改了代码导致无法覆盖服务器上的。

代码冲突体现在:比如我和同事本地都拉取了最新的notebook.py文件。

场景1:只有我本地修改了这个notebook.py,在去pull或push是不会冲突的;

场景2:同事在他本地修改了这个notebook.py文件并commit和push到远程仓库了,然后我在本地修改了这个notebook.py文件,想push上去会push不上去,需要先pull下来,但pull下来时也会有冲突。

此时需要可以参考下面方法。

(1) 如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:

git stash -u

git pull

git stash pop

注意其中git stash带的参数含义:

If the --include-untracked (-u) option is used, all untracked files are also stashed and then cleaned up with git clean, leaving the working directory in a very clean state.

If the --all option is used instead then the ignored files are stashed and cleaned in addition to the untracked files.

(2) 如果要直接使用服务器上最新版本,那么可以选择直接覆盖

git reset --hard

git pull

注意:git stash操作默认不会存储未跟踪的文件!!!

我出错过一次导致我的新增文件都丢失了,后面通过下面方法找回来了

$ git fsck --lost-found

$ git show 126f92e2ee734c6306a224dbafc774146530b70f

$ git merge 126f92e2ee734c6306a224dbafc774146530b70f

撤销git reset

git reset默认为:git reset --mixed

撤销 git add

    撤销所有的已经 add 的文件:git reset HEAD .

    撤销某个文件或文件夹:git reset HEAD  


撤销 git commit

    git reset --soft HEAD^

    HEAD^的意思是上一个版本,也可以写成HEAD~1

你可能感兴趣的:(GIT,git,github,源代码管理)