git 是一种开源的,用于软件开发和管理的工具,有了它,无论对于个人还是团队,都对项目开发都有着很大的便利。
今天,我们来说说那些 git 的那些最基本的命令。
首先,在 git 上建立一个 test1 的文件夹,请注意,git 里面喜欢称呼文件夹为 repository, 就像这样。
与之对应的,在本地也建立一个 test1 文件夹,你可以自己选取文件夹的位置。进入你本地的 test1 文件夹,启动 cmd 或者 git bash。
输入第一个命令:
git init
好了,从现在开始,这个本地的 test1 文件夹已经是一个 git 文件夹了,你可以在接下来对其使用更多的 git 命令了。对于初学者而言,理解到这里就够了。这一步也会自动帮你建立一个 master 分支(如果你不明白什么是分支,没关系,你可以继续往下看)。
执行完这一步之后,你会发现本地的 test1 文件夹里面多了一个 .git 文件夹。
接着,输入命令
git remote add origin https://github.com/your_account/test1.git
在完成了这一步时,git 就建立了你本地的 test1 和 git 上 test1 之间的映射关系,剩下来的一切命令就不需要你指定远程的文件夹是什么了。
在本地建立一个 a.txt 文件,在文件内部输入 aaa,保存退出。此时,这个 a.txt 文件还不属于 你本地的 test1 文件夹。
输入
git add .
此时,你新建立(相对于上次 commit 的)的所有文件,(在本例中仅仅为 a.txt)被添加到了一个临时空间里面,只有当你 commit 了以后,临时空间里的所有文件会被正式上传到当前的分支里。
输入
git commit -m "1"
至此为止,a.txt 已经正式属于本地 test1 下的 master 分支了。
其中 -m 后面的参数为对这一次 commit 的简单描述。请注意,在正式的工程项目中,这个参数不能随随便便的填写。
接着,我们输入
git push -u origin master
执行后 git 会让你输入你的 git 账号和密码,输入完后,本地的 test1 master branch 下的内容会正式地传入到远程 git 上。请注意,由于你之前建立了 origin 和 https://github.com/your_account/test1.git 之间的映射关系,所以 git 知道 origin 代表什么。
远程中 test1 下也有了 a.txt
接下来在本地建立新的 branch branch1 并切换至 branch1,我们使用命令
git checkout -b branch1
打开本地的 test1 文件夹,我们发现,a.txt 文件依然存在,这是因为 branch1 是在你添加完 a.txt 的 master 分支后建立的,我们再添加一个 b.txt,写 bbb,保存退出。
请注意,此时此刻 b.txt 还不属于 git。
我们在切换回 master
git checkout master
观察本地 test1 文件夹,我们发现 b.txt 依然存在,这是因为 b.txt 还不属于 git。
再次切回 branch1,输入
git checkout branch1
再输入
git add .
git commit -m "2"
此时 b.txt 已经完全隶属于 branch1 分支了,因为你 commit 了。
切回 master
git checkout master
发现 b.txt 不存在。
切回 branch1,把 a.txt 内容改为 aaaaa。
git checkout branch1
再输入
git add .
git commit -m "3"
接着切回 master
git checkout master
点开 master 下的 a.txt,发现其也被修改了。
在 master 下建立 b.txt,输入 bbbbb (5个),commit。
git add .
git commit -m "4"
切回 branch1,
点开 b.txt,发现 b.txt 中间只有 3 个b。
请问,为什么 a.txt 的修改可以在分支内部迁移,而 b.txt 不行?
输入
git merge master
此时报错:
CONFLICT (add/add): Merge conflict in b.txt
Auto-merging b.txt
Automatic merge failed; fix conflicts and then commit the result.
输入
git add .
git commit -m '5'
打开 b.txt 发现其变为:
<<<<<<< HEAD
bbb
=======
bbbbb
>>>>>>> master
切回 master,输入
git merge branch1
打开 b.txt
发现 b.txt 依然为
<<<<<<< HEAD
bbb
=======
bbbbb
>>>>>>> master
请问此时 b.txt 为什么不是
<<<<<<< HEAD
<<<<<<< HEAD
bbb
=======
bbbbb
>>>>>>> master
=======
bbbbb
>>>>>>> master
输入
在 master 添加 c.txt 并输入 ccc 保存。输入
git add .
git stash
发现 c.txt 消失了。这是因为 c.txt 被保存在了栈里面,输入
git stash pop
之前的环境被弹出,c.txt 重新出现
再输入
git stash
然后输入
git stash apply
此时存在 c.txt 的环境会被回复,但是与使用 pop 不同的是,存在 c.txt 的环境依然存在栈里面。
我们再输入
git reset--hard origin/master
git checkout
发现本地又与远程 git 保持一致了。
输入
git stash apply
发现只有 c.txt 被恢复。
当你搞懂了本文的所有细节,相信你就不仅仅是一个 git 的新手了。